[PYTHON] Ansible: Zeigt mehrzeilige Befehle an, die vom Shell-Modul in einem fehlerhaften Zustand ausgeführt werden

Anfrage

Ich möchte den vom Shell-Modul im nachfolgenden Debug-Modul ausgeführten mehrzeiligen Befehl mit einem Zeilenumbruch überprüfen.

Lösung

Ich konnte keinen geeigneten im Filter finden, aber es ist mit splitlines () von Python möglich

Spielbuch Beispiel

playbook.yml



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

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

    - debug: { var: r.cmd }              # <=Schwer zu lesen, wenn die Ausgabe so ist, wie sie ist
    
    - debug: { var: r.cmd.splitlines() } # <= splitlines()Getrennt bei

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

Ausführungsbeispiel

$ 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" # <=Beispiel für die Ausgabe wie sie ist
}

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "r.cmd.splitlines()": [
        "echo a",               # <=Beispiel für eine durch Zeilen getrennte Ausgabe
        "  echo b",              # <=Beispiel für eine durch Zeilen getrennte Ausgabe
        "echo c"                # <=Beispiel für eine durch Zeilen getrennte Ausgabe
    ]
}

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   

Beachten Sie, dass das Befehlsmodul (nicht das Shell-Modul) nicht verwendet werden kann, da es nicht als Zeichenfolge an die Registrierungsvariable übergeben wird. Es wäre schön, wenn es auch bei Ausfall separat zeilenweise angezeigt werden könnte.

Recommended Posts

Ansible: Zeigt mehrzeilige Befehle an, die vom Shell-Modul in einem fehlerhaften Zustand ausgeführt werden
Suchen Sie die URL in sitemap.xml ohne zu große Unterbrechungen mit einem Linux-Befehl
Machen Sie es sichtbar, indem Sie die von journalctrl abgeschnittene Linie durchbrechen
Ausführen des in Ansible Tower hinzugefügten Ansible-Moduls
Laden Sie das gleichnamige Modul an einer anderen Stelle
Geben Sie eine Zeichenfolge mit Zeilenumbrüchen in PyYAML aus
[Jinja2] Änderung des Zeilenumbruchs abhängig von der Position des Bindestrichs
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
[Python] Erstellen Sie ein Programm, das Zeilenumbrüche in der Zwischenablage löscht. + Als Verknüpfung mit Fenstern registrieren
Führen Sie Shell-Befehle in Python aus
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript