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 パッケージをインストールした後、デーモンをすぐに終了したいので、パッケージのインストール直後に meta コマンドを追加すると、Ansible で待機する必要がなくなります。