Fragen zur Ansible-Verbindung zu Remote-Hosts


8

Ich möchte einige Fragen zur Arbeitsweise von Ansible stellen.

1 - Welche Shell verwendet Ansible bei der Anmeldung am Remote-Host?

/ubuntu/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716

2 - Wenn ich 10 Aufgaben in einem Playbook habe, stellt ansible 10 Mal eine Verbindung zum Remote-Host her ODER verwendet eine einzige Verbindung, um alle diese 10 Aufgaben auszuführen?

3 - Wenn ich 10 Aufgaben auf 2 Hosts ausführe,

Die erste Aufgabe wird auf Host 1 und dann auf Host 2 ausgeführt, dann die zweite Aufgabe auf Host 1 und dann auf Host 2, ... bald,

.

Also, auch hier bleibt die Verbindung zu beiden Hosts bestehen?

ODER

stellt es zuerst eine Verbindung zu Host 1 her, führt Aufgabe 1 aus und trennt dann die Verbindung UND stellt dann eine Verbindung zu Host 2 her, führt Aufgabe 1 aus und trennt dann die Verbindung?


1
Im Allgemeinen funktioniert die Stack Exchange-Plattform am besten, wenn Sie nur eine Frage pro ... Frage stellen.
Xiong Chiamiov

Ja in der Tat! Da es sich jedoch um kleine Fragen handelte, die sich auf ein einziges Thema bezogen, habe ich sie kombiniert.
luv.preet

Bitte kombinieren Sie in Zukunft keine Fragen mehr, da es schwieriger ist, das gesamte Q & A-Set zu beantworten und zu lesen. Frage 1 ist nicht wirklich mit den beiden anderen verwandt.
RichVel

Antworten:


7

Kann 1 nicht beantworten (Ich dachte immer, es wird nur die Standardeinstellung / bin / sh verwendet, sofern nicht anders angegeben?).

  1. Die Verbindung wird mehr als 10 Mal hergestellt. Eine einzelne Task verfügt normalerweise über eine SCP- oder SFTP-Verbindung zum Kopieren der Taskdatei, die remote ausgeführt wird, und eine weitere Verbindung zum Auslösen des Skripts. Sie können dies überwachen, indem Sie Ihr Playbook mit -vvv ausführen, z. B.:

    ansible-playbook deploy_app.yml -u maplebird -vvv
    

    Die Ausführlichkeit der 3. Ebene zeigt alle Verbindungen zum Client an.

  2. Standardmäßig führt Ansible Aufgaben auf allen Hosts bis zur maximal konfigurierten Anzahl von Gabeln gleichzeitig aus. Es wird also Aufgabe 1 auf beiden Hosts ausgeführt, dann Aufgabe 2 auf beiden Hosts usw. Gabeln sind in ansible.cfg definiert und standardmäßig auf 5. Ändern Sie diese Variable in eine höhere Zahl oder kommentieren Sie sie aus:

    forks = 5
    

    Optional können Sie beim Ausführen von Playbooks auch einen fortlaufenden Stapel erstellen, indem Sie die serialOption im Playbook angeben. Dadurch werden nur Aufgaben für die von Ihnen definierten Hosts gleichzeitig ausgeführt.

    Angenommen, Sie führen ein Playbook gegen 5 Hosts aus und haben die serielle Option festgelegt. Mit serial = 1 wird jeweils der vollständige Playbook 1-Host ausgeführt. Mit serial = 2 werden Hosts 1 & 2, dann Hosts 2 & 3 und dann Host 5 ausgeführt. Beispiel:

    name: deploy to all webservers
    hosts: webservers
    serial: 2
    roles:
       - deploy_application
    

Lesen Sie mehr:

Serielles (rollendes) Playbook läuft:

Gabeln:

Hoffe das hilft.


2
IIRC ansibleverwendet sshMultiplexing. Sollte es also nicht für alle Aufgaben eine einzelne Verbindung zu einem Remote-Host sein?
Heemayl

3

(1) Welche Shell verwendet Ansible?

Ansible verwendet /bin/shstandardmäßig. Auf vielen * nix-Systemen, einschließlich RHEL / CentOS, /bin/shist es bashjedoch unter Ubuntu / Debiandash viel grundlegender.

Ansible verwenden bash

Es sollte möglich sein, dies mit der executable = /bin/bashKonfigurationsoption in ansible.cfg zu ändern und möglicherweise auch ansible_shell_type im Inventar festzulegen .

Aber in der Praxis (auf ansible 2.2.2 und höher) Ich und andere haben festgestellt , dass Einstellung executablein ansible.cfgnicht funktioniert (ob in becomeBetrieb oder nicht).

Ein Ansatz, der gut funktioniert, aber ein bisschen mehr Code pro Aufgabe bedeutet, besteht darin, Folgendes zu schreiben:

- shell:
    echo hello from $0
  args:
    executable: /bin/bash

Dies sollte bedeuten hello from /bin/bash, dass die Shell korrekt ist.

Wenn Sie verwenden müssen rvm, rbenv, pyenvoder ähnliche Werkzeuge , die erfordern eine vorherige source ~/.bash_profile(wie bei einer interaktiven Shell), müssen Sie einen Wrapper - Skript verwenden oder invoke bash in der Schale Aufgabe .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.