Ansibleタスクはハンドラーをトリガーしません

Ansibleタスクはハンドラーをトリガーしません

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 で待機する必要がなくなります。

関連情報