0
我有一個Ansible操作手冊在一組服務器中安裝可變數量的應用程序。安裝的應用程序,一些順序任務必須運行,並且因爲可能有多個應用程序,我遍歷他們with_items:
Ansible處理器讀取本地事實
我也以這樣一種方式,如果三個任務都登記在一個地域的實際情況的任何變化在應用程序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}} |默認([])'**這可以防止像這樣的錯誤:'在評估條件'var時出錯是未定義的' – felichas