我無法在 ansible 角色中取得任務來觸發處理程序。這是我正在使用的文件:
roles/services/tasks/postgresql.yml
節目
- name: install postgresql packages
apt: name={{ item }} state=present
sudo: yes
with_items:
- postgresql
- libpq-dev
- python-psycopg2
notify:
- set postgres password
- configure md5 security
- restart postgres server
roles/services/handlers/main.yml
節目
- name: set postgres password
sudo: yes
sudo_user: postgres
postgresql_user: name=postgres password=newpass
- name: configure md5 security
sudo: yes
copy: src=pg_hba.conf dest=/etc/postgresql/9.3/main/pg_hba.conf group=postgres owner=postgres backup=yes
- name: restart postgres server
sudo: yes
service: name=postgresql enabled=yes state=restarted
當我運行劇本時,任務成功並確認它更改了狀態,但它不會觸發處理程序。這是該角色的最後一個任務,完成後,ansible 會繼續執行我的劇本中下一個角色的第一個任務:
TASK: [services | install postgresql packages] ********************************
changed: [IP.REMOVED.##] => (item=postgresql,libpq-dev,python-psycopg2)
TASK: [passenger | install passenger gem] *************************************
我嘗試過以各種方式改變縮進,但沒有成功。我希望有新眼光的人能看到我所缺少的東西。
答案1
您可能等待的時間不夠長。 Ansible 將盡可能長時間地等待處理程序。如果您想執行所有已排隊的處理程序,請嘗試
- meta: flush_handlers
我發現這非常方便。例如,在我安裝 debian 軟體包後,我希望它立即殺死守護進程,因此我在軟體包安裝後立即添加元命令,並且 ansible 不會讓我等待。