web-dev-qa-db-fra.com

Comment obtenir les journaux/détails des exécutions du module ansible-playbook?

Dis que j'exécute ce qui suit.

$ 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

$

Je sais pour sûr que c'était réussi.

Où/comment puis-je voir le "Hello World" en écho/imprimé par mon script sur l'hôte distant (MyTestHost)? Ou le code retour/sortie du script?

Ma recherche montre qu’il serait possible d’écrire un plugin pour intercepter les rappels d’exécution de modules ou quelque chose du genre et écrire un fichier journal. Je préférerais ne pas perdre mon temps avec cela.

Par exemple. quelque chose comme la sortie standard ci-dessous (notez que je cours ansible et pas ansible-playbook):

$ 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"
}

$
69
Kashyap

Si vous passez l'indicateur -v à ansible-playbook sur la ligne de commande, vous verrez les options stdout et stderr pour chaque tâche exécutée:

$ ansible-playbook -v playbook.yaml

Ansible a également un support intégré pour la journalisation. Ajoutez les lignes suivantes à votre fichier de configuration ansible :

[defaults] 
log_path=/path/to/logfile

Ansible recherchera le fichier de configuration à plusieurs endroits:

  • ansible.cfg dans le répertoire en cours où vous avez exécuté ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg
92
Lorin Hochstein

La tâche de script playbook générera stdout comme la commande non-playbook, elle doit simplement être enregistrée dans une variable à l'aide de register. Une fois que nous avons cela, le module debug peut imprimer dans le flux de sortie du livre de lecture. 

tasks:
- name: Hello yourself
  script: test.sh
  register: hello

- name: Debug hello
  debug: var=hello

- name: Debug hello.stdout as part of a string
  debug: "msg=The script's stdout was `{{ hello.stdout }}`."

La sortie devrait ressembler à ceci:

TASK: [Hello yourself] ******************************************************** 
changed: [MyTestHost]

TASK: [Debug hello] *********************************************************** 
ok: [MyTestHost] => {
    "hello": {
        "changed": true, 
        "invocation": {
            "module_args": "test.sh", 
            "module_name": "script"
        }, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "Hello World\r\n", 
        "stdout_lines": [
            "Hello World"
        ]
    }
}

TASK: [Debug hello.stdout as part of a string] ******************************** 
ok: [MyTestHost] => {
    "msg": "The script's stdout was `Hello World\r\n`."
}
17
joemaller

Il existe également un autre moyen de générer un fichier journal.

Avant d'exécuter ansible-playbook, exécutez les commandes suivantes pour activer la journalisation:

  • Spécifiez l'emplacement du fichier journal. 

    export ANSIBLE_LOG_PATH = ~/ansible.log 

  • Activer le débogage 

    export ANSIBLE_DEBUG = True 

  • Pour vérifier le fichier journal généré.

    moins $ ANSIBLE_LOG_PATH

5
Kamlesh

En utilisant des plugins de rappel, vous pouvez avoir la sortie standard de vos commandes sous une forme lisible avec la lecture: Gist: human_log.py

Editer par exemple la sortie:

 _____________________________________
< TASK: common | install apt packages >
 -------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)

stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.


stderr:

start:
2015-03-27 17:12:22.132237

end:
2015-03-27 17:12:22.136859
3
J0hnG4lt

Une aide en ligne de commande Ansible, telle que ansible-playbook --help, montre comment augmenter la verbosité de sortie en définissant le mode commenté (-v) sur plus de verbosité (-vvv) ou sur la verbosité de débogage de connexion (-vvvv). Cela devrait vous donner quelques-uns des détails que vous recherchez dans stdout, que vous pouvez ensuite enregistrer.

0
Zach Weg

Plugins officiels

Vous pouvez utiliser les plugins de rappel output . Par exemple, à partir de Ansible 2.4, vous pouvez utiliser le plugin debug output callback:

# In ansible.cfg:
[defaults]
stdout_callback = debug

(Alternativement, lancez export ANSIBLE_STDOUT_CALLBACK=debug avant de lancer votre playbook)

Important: vous devez exécuter ansible-playbook avec l'option -v (--verbose) pour voir l'effet. Avec stdout_callback = debug défini, la sortie devrait maintenant ressembler à ceci:

TASK [Say Hello] ********************************
changed: [192.168.1.2] => {
    "changed": true,
    "rc": 0
}

STDOUT:


Hello!



STDERR:

Shared connection to 192.168.1.2 closed.

Outre le module debug, il existe d’autres modules si vous souhaitez que la sortie soit formatée différemment. Il y a json, yaml, unixy, dense, minimal, etc. ( liste complète ).

Par exemple, avec stdout_callback = yaml, la sortie ressemblera à ceci:

TASK [Say Hello] **********************************
changed: [192.168.1.2] => changed=true 
  rc: 0
  stderr: |-
    Shared connection to 192.168.1.2 closed.
  stderr_lines:
  - Shared connection to 192.168.1.2 closed.
  stdout: |2-

    Hello!
  stdout_lines: <omitted>

Plugins tiers

Si aucun des plugins officiels n'est satisfaisant, vous pouvez essayer le plugin human_log. Il y a quelques versions:

0
Flux