Ich möchte einige Fragen zur Arbeitsweise von Ansible stellen.
1 - Welche Shell verwendet Ansible bei der Anmeldung am Remote-Host?
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?
Antworten:
Kann 1 nicht beantworten (Ich dachte immer, es wird nur die Standardeinstellung / bin / sh verwendet, sofern nicht anders angegeben?).
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.:
Die Ausführlichkeit der 3. Ebene zeigt alle Verbindungen zum Client an.
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:
Optional können Sie beim Ausführen von Playbooks auch einen fortlaufenden Stapel erstellen, indem Sie die
serial
Option 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:
Lesen Sie mehr:
Serielles (rollendes) Playbook läuft:
Gabeln:
Hoffe das hilft.
quelle
ansible
verwendetssh
Multiplexing. Sollte es also nicht für alle Aufgaben eine einzelne Verbindung zu einem Remote-Host sein?(1) Welche Shell verwendet Ansible?
Ansible verwendet
/bin/sh
standardmäßig. Auf vielen * nix-Systemen, einschließlich RHEL / CentOS,/bin/sh
ist esbash
jedoch unter Ubuntu / Debiandash
viel grundlegender.Ansible verwenden bash
Es sollte möglich sein, dies mit der
executable = /bin/bash
Konfigurationsoption 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
executable
inansible.cfg
nicht funktioniert (ob inbecome
Betrieb oder nicht).Ein Ansatz, der gut funktioniert, aber ein bisschen mehr Code pro Aufgabe bedeutet, besteht darin, Folgendes zu schreiben:
Dies sollte bedeuten
hello from /bin/bash
, dass die Shell korrekt ist.Wenn Sie verwenden müssen
rvm
,rbenv
,pyenv
oder ähnliche Werkzeuge , die erfordern eine vorherigesource ~/.bash_profile
(wie bei einer interaktiven Shell), müssen Sie einen Wrapper - Skript verwenden oder invoke bash in der Schale Aufgabe .quelle
http://docs.ansible.com/ansible/latest/shell_module.html
quelle