グループの名前になるグループ内のすべてのホストにディレクトリを作成する必要がある使用例があります。
例:次の形式の出力で動的インベントリファイルを作成します。
{
"db": ["Host1", "Host2", "Host3"],
"logs": ["Host2"],
"misc": ["Host4"]
}
グループdbのすべてのホストにdbという名前のディレクトリを作成し、グループログのすべてのホストにlogという名前のディレクトリを作成する必要があります。
これまでのところ、私のプレイブックは次のようになります。
- hosts: db
tasks:
- name: create db directory
file: path=db state=directory
- hosts: logs
tasks:
- name: create logs directory
file: path=logs state=directory
グループの数は少なくとも10以上です。これは将来成長するかもしれません。将来のグループのために簡単に拡張および管理できるものを書きたいと思っています。
私は、ansibleがタスクのグループ名のデフォルトのファクトまたは変数を提供しないことを読みました。 Hostにgroupnameのような変数を指定すると、これを行うのが最善であると思います。
同じタスクを繰り返す代わりにループを使用できるより良い解決策はありますか?
マジック変数group_names
を使用できます。変数は、現在のホストが含まれるすべてのグループのリスト(配列)です。詳細は documentation を参照してください
- hosts: all
tasks:
- name: create db directory
file:
path: "{{ item }}"
state: directory
with_items: "{{ group_names }}"
免責事項:このコードをテストしませんでした。