2016-05-22 8 views
0

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ß.

Antwort

0

Sie müssen nur changed_when: false idempotent sein. Auch ich denke, Sie dies einfach mehr tun können:

- name: Task1 
    shell: bash -c 'set -o pipefail;source /etc/nova/openrc && heat stack-show myne01 | tee stack_show.log' 
    changed_when: false 
    args: 
    creates: stack_show.log 
    register: list 

- name: Delete stack-show.log 
    file: path=/home/wrsroot/stack_show.log state=absent 
    changed_when: false 
    # You don't need this because file will deleted if exists 
    # when: "list.rc != 0" 

# You don't need it because command will failed 
# set -o pipefail 
#- name: Failed the stack 
# shell: "echo 'stack is failed'" 
# when: "list.rc != 0" 
# failed_when: "list.rc != 0" 

Sie Katze versuchen Ansible 2.x Blocks

tasks: 
    - block: 
     - shell: bash -c 'set -o pipefail;source /etc/nova/openrc && heat stack-show myne01 | tee stack_show.log' 
      changed_when: false 
      args: 
       creates: stack_show.log 
      register: list 

     always: 
     - debug: msg="this always executes"  
     - name: Delete stack-show.log 
       file: path=/home/wrsroot/stack_show.log state=absent 
       changed_when: false