2017-04-16 19 views
0

私は、サーバのグループに可変数のアプリケーションをインストールするためのAneworkプレイブックを持っています。アプリケーションをインストールするには、いくつかの順次タスクを実行する必要があり、いくつかのアプリケーションが存在する可能性があるため、ループします。with_items:可能なハンドラはローカルファクトを読み込みます

また、ローカルファクトの変更を3つのタスクアプリケーションAで実行されると、アプリケーションAにフラグが立てられます。

ハンドラに問題があります。これらのローカルファクトを読み込み、フラグが立てられたアプリケーションを再起動する必要がありますが、これを達成するのに失敗しています。私のハンドラはスキップするだけですが、デバッグはフラグを使ってローカルファクトを示します。

マイ脚本は、次のようになります。

--- 
- name: Ensure the application's jar file exists 
    copy: 
    src: '{{ item.appName }}/{{ item.jarName }}' 
    dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.jarName }}' 
    register: task 
    with_items: '{{ deployApp }}' 
    notify: Restart application 

- name: Registering App for later restart 
    set_fact: 
    myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}" 
    with_items: "{{ task.results }}" 
    when: "{{ item.changed }}" 

- name: Ensure the application's conf file exists 
    template: 
    src: '{{ item.confName }}.j2' 
    dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.confName }}' 
    register: task 
    with_items: '{{ deployApp }}' 
    notify: Restart application 

- name: Registering App for later restart 
    set_fact: 
    myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}" 
    with_items: "{{ task.results }}" 
    when: "{{ item.changed }}" 

私は次の助けが必要ハンドラ。これは、 "アプリケーションを再起動" タスクをスキップします

- name: Restart application 
    debug: var=myapps_toberestarted_{{ item.appName }} 
    with_items: "{{ deployApp }}" 
    when: myapps_toberestarted_{{ item.appName }} == 'true' 

をそしてfinaly私group_vars

AppsRootFolder: /opt/Apps 
deployApp: 
    - { appName: "API", jarName: "api.jar", confName: "api.conf" } 
    - { appName: "Demo", jarName: "demo.jar", confName: "demo.conf" } 
    - { appName: "Another", jarName: "another.jar", confName: "another.conf" } 

答えて

0

true/falseブール値ではない文字列がある(それゆえもitem.changedで、タスクの結果changed変数に登録)このようにしてハンドラで条件を定義することができます:

when: myapps_toberestarted_{{ item.appName }} 

Wi th == 'true'あなたは常に負の結果を与える文字列と比較しています。

+0

ありがとうございます。今は期待どおりに動作します。実際には、変更されていない他のアプリケーションでのエラーを避けるためにデフォルトを追加しました。したがって、ローカルのファクトが設定されていません** 'when:myapps_toberestarted _ {{item.appName}} |デフォルト([]) '**これにより、次のようなエラーを防ぐことができます:' conditionalを評価中のエラー '' var is undefined' – felichas

関連する問題