web-dev-qa-db-ja.com

Ansibleでタスクを実行する前にハンドラーを強制的に実行する方法は?

指定したIPで構成する必要があるプレイブックがあり、このアプリに接続して内部のものを構成する必要があります。

問題があります:アプリの構成で何かを変更した後、アプリを再起動する必要があり、アプリを再起動しないと、アプリへの接続に失敗しました(アプリは新しいIPアドレスの新しい構成について何も知らないため、接続できません) mアクセスしようとしています)。

私の現在のプレイブック:

tasks:
- name: Configure app
  template: src=app.conf.j2 dest=/etc/app.conf
  notify: restart app

- name: Change data in app
  configure_app: Host={{new_ip}} data={{data}}

handlers:
- name: restart app
  service: name=app state=restarted

「アプリのデータを変更」を実行する前にconfigure_appが変更された場合、ハンドラーを強制的に実行する必要があります。

47
George Shuklin

プレイの最後ではなく、2つのタスクの間にハンドラーを強制的に実行する場合は、2つのタスクの間にこれを配置する必要があります。

- meta: flush_handlers

Ansible documentation からの例:

tasks:
   - Shell: some tasks go here
   - meta: flush_handlers
   - Shell: some other tasks

これにより、特定の1つだけでなく、all保留中のハンドラーがその時点で実行されることに注意してください。

87
Woodham