web-dev-qa-db-fra.com

Ansible: comment afficher la sortie

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.

14
Tom Haley

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
29
SztupY