回答:
プレイブックの手順を実行する際に並列処理が必要ない場合は、フォークレベルを1に設定します。
ansible-playbook --forks=1 ...
これをansible cfgファイルに入れることもできます:
[defaults]
forks=1
ただし、個別に必要な場合は、上記のコマンドラインオプションを使用してください。
編集:
serial: 1
完全に異なることを行います。つまり、各ホストのプレイブックを順番に実行し、完全なプレイブックの完了を待ってから次のホストに移動するようなものです。forks=1
は、次のホストで同じタスクを実行する前に、あるホストでプレイの最初のタスクを実行することを意味します。したがって、次のタスクに触れる前に、各ホストで最初のタスクが実行されます。
だから、あなたforks=1
はたった一回のプレーが欲しい。残念ながら、現在は不可能です。
serial: 1
完全に異なることを行います。つまり、各ホストのプレイブックを順番に実行し、完全なプレイブックの完了を待ってから次のホストに移動するようなものです。forks=1
は、次のホストで同じタスクを実行する前に、あるホストでプレイの最初のタスクを実行することを意味します。したがって、次のタスクに触れる前に、各ホストで最初のタスクが実行されます。だから、あなたforks=1
はたった一回のプレーが欲しい。残念ながら、現在は不可能です。
この問題には回避策があります-ホスト(またはグループ)のリストをに渡し、このリストでwith_items
使用できdelegate_to
ます。このように、タスクはホストごとに実行されます。
例えば:
- name: start and enable rabbitmq (run task host by host)
service:
name: "rabbitmq-server"
state: "started"
enabled: true
delegate_to: "{{ item }}"
with_items: "{{ groups['rabbitmq-cluster'] }}"
run_once: true
run_once: true
そこにあるのか疑問に思う人のために、それを取り出してみてください。何が起こるのか気に入らないでしょう。(非常に多くの繰り返しaaaahhhh)
ローカルで実行できるコマンドの場合、ループを使用して、プレイ内のすべてのホストを反復処理します。これは、コマンドをローカルで実行できる場合にのみ機能します。キーがセットアップされている場合、この方法でリモートマシンに対してsshを使用してコマンドを1つずつ実行することもできますが、エスカレーションについて話すときは難しくなります。
例えば:
- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed
run_once: yes
connection: local
become: no
command: "ssh-keygen -R {{ item }}"
with_items:
- "{{ inventory_hostname }}"
inventory_hostname
。そうでない場合、ループは意味をなしません。
serial: 1
少なくとも演劇に設定させてください。しかし、私はそれを演劇のサブアイテムに設定したいだけです(それの正しい名前は何でも。私はそれが「タスク」であると考えましたが、上記のコメントは同意しないようです)。