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