[PYTHON] Ansible: affiche les commandes multilignes exécutées par le module shell dans un état interrompu

Demande

Je veux vérifier la commande multiligne exécutée par le module shell dans le module de débogage suivant avec un saut de ligne.

Solution

Je n'ai pas trouvé de filtre approprié, mais c'est possible avec splitlines () de python

exemple de playbook

playbook.yml



---
- hosts: all
  gather_facts: false
  tasks:

    - shell: |
        echo a
          echo b
        echo c
      register: r

    - debug: { var: r.cmd }              # <=Difficile à lire si la sortie est telle qu'elle est
    
    - debug: { var: r.cmd.splitlines() } # <= splitlines()Séparé à

    - debug: { var: r.stdout_lines }
    - debug: { var: r.stderr_lines }

Exemple d'exécution

$ ansible-playbook -i localhost, -c local playbook.yml

PLAY [all] *******************************************************************************************************

TASK [shell] *****************************************************************************************************
changed: [localhost]

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "r.cmd": "echo a\n  echo b\necho c\n" # <=Exemple de sortie tel quel
}

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "r.cmd.splitlines()": [
        "echo a",               # <=Exemple de sortie séparée par des lignes
        "  echo b",              # <=Exemple de sortie séparée par des lignes
        "echo c"                # <=Exemple de sortie séparée par des lignes
    ]
}

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "r.stdout_lines": [
        "a",
        "b",
        "c"
    ]
}

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "r.stderr_lines": []
}

PLAY RECAP *******************************************************************************************************
localhost                  : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Notez que le module de commande (et non le module shell) ne peut pas être utilisé car il n'est pas passé sous forme de chaîne à la variable de registre. Ce serait bien s'il pouvait être affiché séparément par ligne même en cas d'échec.

Recommended Posts

Ansible: affiche les commandes multilignes exécutées par le module shell dans un état interrompu
Recherchez l'URL dans sitemap.xml sans trop de pauses avec une commande Linux
Rendez-le visible en coupant la ligne coupée par journalctrl
Comment exécuter le module Ansible ajouté dans Ansible Tower
Chargez le module du même nom dans un autre emplacement
Sortie d'une chaîne avec des sauts de ligne dans PyYAML
[Jinja2] Changement de saut de ligne en fonction de la position du trait d'union
Traitez les fichiers du dossier dans l'ordre avec le script shell
[Python] Créez un programme qui supprime les sauts de ligne dans le presse-papiers + Enregistrez-vous comme raccourci avec Windows
Exécuter des commandes shell en Python
Traitez le contenu du fichier dans l'ordre avec un script shell