Angenommen, ich führe Folgendes aus.
$ cat test.sh
#!/bin/bash
echo Hello World
exit 0
$ cat Hello.yml
---
- hosts: MyTestHost
tasks:
- name: Hello yourself
script: test.sh
$ ansible-playbook Hello.yml
PLAY [MyTestHost] ****************************************************************
GATHERING FACTS ***************************************************************
ok: [MyTestHost]
TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]
PLAY RECAP ********************************************************************
MyTestHost : ok=2 changed=0 unreachable=0 failed=0
$
Ich weiß mit Sicherheit, dass es erfolgreich war.
Wo / wie sehe ich die "Hallo Welt", die von meinem Skript auf dem Remote-Host (MyTestHost) wiedergegeben / gedruckt wird? Oder der Rückkehr- / Exit-Code des Skripts?
Meine Forschung zeigt mir, dass es möglich wäre, ein Plugin zu schreiben, um Rückrufe zur Modulausführung oder ähnliches in diesen Zeilen abzufangen und eine Protokolldatei zu schreiben. Ich würde es vorziehen, meine Zeit nicht damit zu verschwenden.
ZB so etwas wie das Standard unten (beachte, dass ich ansible und nicht ansible-playbook laufen lasse):
$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
"rc": 0,
"stderr": "",
"stdout": "Hello World\n"
}
$
set -x
undset +x
in einem Shell-Skript.no_log: True
Flag verwenden, um zu verhindern, dass ein Befehl oder ein Playbook protokolliert wird, aber das ist meiner Meinung nach so feinkörnig wie es nur geht.logrotate
,log_path
damit jederansible
Lauf eine andere Datei enthält (mit dem in der Datei enthaltenen Befehl / Playbook)?v
Sekunden, um stdout und stderrDie Playbook-Skriptaufgabe wird
stdout
genau wie der Nicht-Playbook-Befehl generiert. Sie muss nur mit in einer Variablen gespeichert werdenregister
. Sobald wir das haben, kann das Debug-Modul in den Playbook-Ausgabestream drucken.Die Ausgabe sollte ungefähr so aussehen:
quelle
Es gibt auch eine andere Möglichkeit, eine Protokolldatei zu generieren.
Führen Sie vor dem
ansible-playbook
Ausführen die folgenden Befehle aus, um die Protokollierung zu aktivieren:Geben Sie den Speicherort für die Protokolldatei an.
Debug aktivieren
So überprüfen Sie die generierte Protokolldatei.
quelle
Offizielle Plugins
Sie können die Output Callback Plugins verwenden . Ab Ansible 2.4 können Sie beispielsweise das Debug- Ausgabe-Callback-Plugin verwenden:
(Alternativ können Sie es ausführen,
export ANSIBLE_STDOUT_CALLBACK=debug
bevor Sie Ihr Playbook ausführen. )Wichtig: Sie müssen
ansible-playbook
mit der Option-v
(--verbose
) ausgeführt werden, um den Effekt zu sehen. Mitstdout_callback = debug
set sollte die Ausgabe nun ungefähr so aussehen:Neben dem
debug
Modul gibt es noch andere Module, wenn die Ausgabe anders formatiert werden soll. Es gibtjson
,yaml
,unixy
,dense
,minimal
usw. ( vollständige Liste ).Mit
stdout_callback = yaml
sieht die Ausgabe beispielsweise ungefähr so aus:Plugins von Drittanbietern
Wenn keines der offiziellen Plugins zufriedenstellend ist, können Sie das
human_log
Plugin ausprobieren . Es gibt einige Versionen:https://github.com/n0ts/ansible-human_log
https://gist.github.com/cliffano/9868180
quelle
Mithilfe von Rückruf-Plugins können Sie die Standardausgabe Ihrer Befehle in lesbarer Form mit play: gist: human_log.py ausgeben
quelle
Ansible Befehlszeilenhilfe, z. B.
ansible-playbook --help
zeigt, wie die Ausführlichkeit der Ausgabe erhöht wird, indem der ausführliche Modus (-v) auf mehr Ausführlichkeit (-vvv) oder die Ausführlichkeit beim Debuggen von Verbindungen (-vvvv) eingestellt wird. Dies sollte Ihnen einige der Details geben, nach denen Sie in stdout suchen, die Sie dann protokollieren können.quelle