我想將一個變量傳遞給通知處理程序,但在SO,文檔或github回購中的問題中找不到任何地方,該如何實現。我正在做的是部署多個webapps,並且當其中一個webapps的代碼發生更改時,它應該重新啓動該webapp的服務。ansible:使用帶通知處理程序的with_items
從this SO question,我得到這個工作,有點:
- hosts: localhost
tasks:
- name: "task 1"
shell: "echo {{ item }}"
register: "task_1_output"
with_items: [a,b]
- name: "task 2"
debug:
msg: "{{ item.item }}"
when: item.changed
with_items: task_1_output.results
(把它放在test.yml與ansible-playbook test.yml -c local
運行)
但這注冊的第一個任務的結果,有條件地在第二個任務中循環。我的問題是當你有兩個或更多需要通知第二個任務的任務時,它會變得雜亂無章!例如,如果更新代碼或更改了配置,請重新啓動Web服務。
AFAICT,沒有辦法將變量傳遞給處理程序。這將爲我徹底解決它。我在github上發現了一些其他人碰到相同問題的問題,並且提出了一些語法,但是他們中沒有一個真正起作用。
包括子劇本也不起作用,因爲使用with_items
與include
一起被棄用。
在我的手冊中,我有一個site.yml
,列出了一個組的角色,然後在該組的group_vars
中定義了應該安裝的webapps(包括版本)的列表。這對我來說似乎是正確的,因爲這樣我可以使用相同的劇本進行舞臺和製作。但也許唯一的解決方案是多次定義角色,並複製分段和生產的角色列表。
那麼這裏的智慧是什麼?
我認爲這是行不通的,只是用Ansible 1.8.4和1.9.0測試一下。處理程序始終根據第一個角色調用「a」來解析'name',即使在後續角色調用觸發時也是如此。由於處理程序及其通知在角色調用中是全局的,因此不能像這樣對其進行參數化。 – famousgarkin 2015-04-08 12:22:54
奇怪!我想我測試了這個,當時是1.7.1。但是我通過改變通知到'''在tasks/main.yml中{{name}}「發生的事情,並通過將處理程序的名稱更改爲'」發生{{name}發生的事情} '。 – j0057 2015-04-08 12:48:36
請參見:https://gist.github.com/j0057/5af0ac913a203a5b94ef - 對不起,我不得不平坦的目錄,也許如果你分叉,你可以訪問早期提交的目錄不平坦。 – j0057 2015-04-08 12:55:46