2016-05-22 7 views
0

私は、私は "シェル"または "コマンド"モジュールを使用して、ほとんどのタスクを実行しています。だから、シェルとモジュールと脚本の冪等を行うために、私はこのような脚本を修正していますが...フェイルブックを最適化してシェルモジュールと等価にする

- 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" 

ここで流れは次のとおりです。

1)表示スタックの状態
2)スタックの実行が失敗した場合エラーを無視して "stack_show.log"ファイルを削除します。したがって、再実行時に、アニプルはこのタスクをスキップしません。
3)スタックの実行が失敗した場合は、タスクに失敗しました。

この方法をお勧めしますか?

偶像性をプレイブックに追加するには、各「シェル」モジュールに9行のコードを追加します。私のプレイブックは非常に大きくなっています。

答えて

0

偶数にするには、changed_when: falseが必要です。 はまた、私はあなたがより簡単にこれを行うことができると思います。

- 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" 

あなたの猫は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 
を試してみてください
関連する問題