Ich automatisiere Stapelbereitstellung mit ansible. Ich benutze "Shell" oder "Befehl" -Modul, um den größten Teil der Aufgabe auszuführen. So Um Textbuch Idempotent mit Shell und Modul zu machen, ich bin zu modifizieren Textbuch wie dieses ..Optimieren Sie das Playbook, um es mit dem Shell-Modul idempotent zu machen
- name: Task1
shell: 'source /etc/nova/openrc && heat stack-show myne01 | tee stack_show.log'
args:
creates: stack_show.log
register: list
- debug: var=list.stdout_lines
ignore_errors: yes
- name: Delete stack-show.log
file: path=/home/wrsroot/stack_show.log state=absent
when: "list.rc != 0"
- name: Failed the stack
shell: "echo 'stack is failed'"
when: "list.rc != 0"
failed_when: "list.rc != 0"
Hier ist die Strömung:
1) Anzeige Stapelstatus
2) Wenn Stapel Ausführung fehlgeschlagen , ignoriere Fehler und lösche die "stack_show.log" -Datei, also wird diese Aufgabe bei der Wiederholung nicht übersprungen.
3) Wenn die Stapelausführung fehlgeschlagen ist, ist die Aufgabe fehlgeschlagen.
Bitte schlagen Sie vor, wenn es einen besseren Weg, dies zu tun.
Um Idempotenz im Playbook hinzuzufügen, füge ich 9 Zeilen Code für jedes "Shell" -Modul hinzu. Es macht mein Spielbuch sehr groß.