ハンドブックをプレイハンド全体で1回だけ実行したいとします。実行可能なハンドラは、プレイブック全体に対して1回だけ実行してください。
私は脚本ファイルに次のincludeステートメントを使用して試みたが、これは各プレイのために一回、複数回実行されているハンドラの結果:ここ
- 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
はメインハンドラ/の内容です。 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回だけ実行するようにするにはどうすればよいですか?
あなたのプレイブックは少し野生のようです。このプレイブックの一般的な考え方は何ですか?なぜこのハンドラをここに含めるのですか?ハンドラはタスクによって通知される必要があるため、ロールの一部です。 ハンドブックの使用方法については、https://docs.ansible.com/ansible/playbooks_intro.htmlを参照してください。 特定のタスクを1回実行するもう1つの方法は、次のとおりです。https://docs.ansible.com/ansible/playbooks_delegation.html#run-once –
野生の意味がわかりません。プレイブックは一連のプレイであり、その例では2つあります。私は複数の演劇のための単一のハンドラを使い、それがプレイブック全体のために一度実行するようにしたい。私はそれが理にかなったことを願うタスクを1回だけ実行する必要はなく、ハンドラを1回だけ実行する必要があります。 – user3155618
@techrafハンドラーに通知する再生には、複数のタスクがあります。質問を編集してタスクの1つを追加しました。 – user3155618