110 votes

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

Disons 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 avec certitude que c'est un succès.

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

Mes recherches me montrent qu'il serait possible d'écrire un plugin pour intercepter les callbacks d'exécution des modules ou quelque chose de ce genre et écrire un fichier journal. Je préfère ne pas perdre mon temps avec cela.

Par exemple, quelque chose comme le stdout ci-dessous (notez que j'exécute ansible et non 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"
}

$

132voto

Lorin Hochstein Points 11816

Si vous passez le -v à ansible-playbook sur la ligne de commande, vous verrez les 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 cherchera le fichier de configuration à plusieurs endroits :

  • ansible.cfg dans le répertoire courant où vous avez exécuté ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg

24voto

joemaller Points 2349

La tâche du playbook script va générer stdout tout comme la commande non-playbook, il suffit de la sauvegarder dans une variable en utilisant register . Une fois qu'on a ça, le module de débogage peut s'imprimer sur le flux de sortie du playbook.

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 à quelque chose comme 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`."
}

23voto

Kamlesh Points 471

Il existe également une autre façon de générer un fichier journal.

Avant de courir ansible-playbook exécutez les commandes suivantes pour activer la journalisation :

  • Indiquez 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é.

    less $ANSIBLE_LOG_PATH

7voto

Flux Points 729

Plugins officiels

Vous pouvez utiliser le plugins de rappel de sortie . Par exemple, à partir d'Ansible 2.4, vous pouvez utiliser la fonction déboguer plugin de rappel de sortie :

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

(Altervatively, run export ANSIBLE_STDOUT_CALLBACK=debug avant d'exécuter votre playbook)

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

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

STDOUT:

Hello!

STDERR:

Shared connection to 192.168.1.2 closed.

Il existe d'autres modules que le debug 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 le résultat 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 plugin. Il existe plusieurs versions :

4voto

J0hnG4lt Points 80

En utilisant des plugins de rappel, vous pouvez faire en sorte que la sortie stdout de vos commandes soit lisible avec le jeu : gist : human_log.py

Modifier pour l'exemple de 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X