私は、Webサーバ(すべて同じホスト上)のリストを含むAnsible変数を持っている:実行Ansibleハンドラ
servers:
- foo
- bar
- baz
そして、その設定ファイルを変更したタスク、およびレジスタ変数に結果:
- name: create server configs
template: ...
with_items: "{{ servers }}"
notify: restart changed servers
register: servers_changed
し、そのタスクの実行時に変更されただけのサーバーを再起動し、ハンドラ:
- name: restart changed servers
command: restart-my-server {{ item.item.name }}
when: item.changed
with_items: "{{ servers_changed.results }}"
私の問題は、異なる設定ファイルを変更する上記のような複数のタスクが必要になることです。しかし、そうすれば、servers_changed
変数を上書きするので、最後の変数だけが使用されます。
私はそれぞれのタスクで異なる変数を登録することができましたが、それぞれのハンドラーごとに異なるハンドラーが必要でした。これは乱雑になるでしょう。より良い方法がありますか?
クール。しかし、なぜ 'with_items:" {{restart_servers}} "をハンドラ内で直接使用しないで、この' when'を...削除するのですか? –
@WojciechKaczmarek私は、私の事例ではあまりにも単純すぎるものを単純化したと思う。私の本当のセットアップでは、 'servers'は各サーバの詳細を含むdictsのリストですが、' restart_servers'は各サーバを識別する名前のリストです。代わりに 'restart_servers'にハンドラループを持たせることもできますが、' servers'をループすることで、再起動する各サーバの詳細にアクセスすることができます。一例として、私は自分のハンドラに各サーバのポート番号を見て、それがオープンするのを待ってから続行します。 –
私はこの例を更新しました。 –