6

Playbook 全体で 1 回だけハンドラーを実行したいと考えています。

Playbook ファイルで次のように include ステートメントを使用しようとしましたが、これにより、ハンドラーが複数回実行され、再生ごとに 1 回実行されました。

- name: Configure common config
  hosts: all
  become: true
  vars:
        OE: "{{ ansible_hostname[5] }}"
  roles:
    - { role: common }
  handlers:
    - include: handlers/main.yml

- name: Configure metadata config
  hosts: metadata
  become: true
  vars:
        OE: "{{ ansible_hostname[5] }}"
  roles:
    - { role: metadata }
  handlers:
    - include: handlers/main.yml

handlers/main.yml の内容は次のとおりです。

- name: restart autofs
  service:
    name: autofs.service
    state: restarted

ハンドラーに通知するタスクの 1 つの例を次に示します。

- name: Configure automount - /opt/local/xxx in /etc/auto.direct
  lineinfile:
     dest: /etc/auto.direct
     regexp: "^/opt/local/xxx"
     line: "/opt/local/xxx   -acdirmin=0,acdirmax=0,rdirplus,rw,hard,intr,bg,retry=2  nfs_server:/vol/xxx"
  notify: restart autofs

プレイブック全体でハンドラーを 1 回だけ実行するようにプレイブックを取得するにはどうすればよいですか?

4

4 に答える 4

0

あなたのハンドラーが何をすべきかは私には明らかではありません。とにかく、公式ドキュメントに関しては、ハンドラー

プレイ内のタスクの各ブロックの最後にトリガーされ、複数の異なるタスクから通知された場合でも 1 回だけトリガーされます[...] Ansible 2.2 以降、ハンドラーは一般的なトピックを「リッスン」することもでき、タスクはこれらのトピックを次のように通知します。

そのため、ハンドラーは、タスクのブロックごとに 1 回通知/実行されます。「すべての」ターゲットホストの後にハンドラーを保持するだけで目標を達成できるかもしれませんが、ハンドラーをきれいに使用しているようには見えません。.

于 2017-01-09T21:03:42.950 に答える