J'ai le playbook suivant, Playbook avec sortie
Il n'y a actuellement aucune erreur et tout se passe bien. Cependant, il n’affiche pas la sortie sur la console. J'ai découvert cela avec d'autres playbooks et je l'ai contourné en ajoutant la tâche suivante au playbook:
-debug: var=output.stdout_lines
et il imprime la sortie. Cependant, j'ai essayé de faire la même chose dans le livre de jeu ci-dessus et il est indiqué que la variable n'était pas définie (code non affiché car il ne fonctionnait pas).
Quelqu'un sait-il qu'il existe un meilleur moyen d'imprimer la sortie sur la console sans utiliser -debug
? Toute référence ansible serait grandement appréciée.
Chaque tâche ansible lors de l'exécution peut enregistrer ses résultats dans une variable. Pour ce faire, vous devez spécifier la variable dans laquelle enregistrer les résultats. Vous pouvez le faire avec le paramètre register
, indépendamment du module utilisé.
Une fois que vous avez enregistré la valeur dans une variable, vous pouvez l’utiliser ultérieurement dans l’une des tâches suivantes. Ainsi, par exemple, si vous souhaitez obtenir la sortie standard d’une tâche spécifique, vous pouvez écrire ce qui suit:
---
- hosts: localhost
tasks:
- Shell: ls
register: Shell_result
- debug:
var: Shell_result.stdout_lines
Ici register
indique à ansible de sauvegarder la réponse du module dans le Shell_result
variable, puis nous utilisons le module debug
pour l’afficher.
Un exemple d'exécution ressemblerait à ceci:
PLAY [localhost] ***************************************************************
TASK [command] *****************************************************************
changed: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"Shell_result.stdout_lines": [
"play.yml"
]
}
Les réponses peuvent contenir plusieurs champs. stdout_lines
est l'un des champs par défaut vous pouvez vous attendre de la réponse d'un module.
Tous les champs ne sont pas disponibles dans tous les modules, par exemple pour un module qui ne renvoie rien à la sortie standard, vous ne vous attendriez à rien dans le stdout
ou le stdout_lines
valeurs, mais le champ msg
peut être renseigné dans ce cas. Il existe également des modules dans lesquels vous pouvez trouver quelque chose dans une variable non standard. Pour ceux-ci, vous pouvez essayer de consulter la documentation du module pour ces valeurs de retour non standard.
Sinon, vous pouvez augmenter le niveau de verbosité de ansible-playbook. Vous pouvez choisir entre différents niveaux de verbosité: -v
, -vvv
et -vvvv
. Par exemple, lors de l’exécution du livre de jeu avec verbosité (-vvv
) vous obtenez ceci:
PLAY [localhost] ***************************************************************
TASK [command] *****************************************************************
(...)
changed: [localhost] => {
"changed": true,
"cmd": "ls",
"delta": "0:00:00.007621",
"end": "2017-02-17 23:04:41.912570",
"invocation": {
"module_args": {
"_raw_params": "ls",
"_uses_Shell": true,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"warn": true
},
"module_name": "command"
},
"rc": 0,
"start": "2017-02-17 23:04:41.904949",
"stderr": "",
"stdout": "play.retry\nplay.yml",
"stdout_lines": [
"play.retry",
"play.yml"
],
"warnings": []
}
Comme vous pouvez le constater, la réponse de chacun des modules et de tous les champs disponibles sera imprimée. Vous pouvez voir que le stdout_lines
est disponible et son contenu correspond à nos attentes.
Pour répondre à votre question principale sur le jenkins_script
module, si vous cochez c'est de la documentation , vous pouvez voir qu'il renvoie la sortie dans le champ output
, vous pouvez donc essayer ce qui suit:
tasks:
- jenkins_script:
script: (...)
register: jenkins_result
- debug:
var: jenkins_result.output