web-dev-qa-db-ja.com

Ansibleで実行中の役割のグループ名を取得するにはどうすればよいですか

グループの名前になるグループ内のすべてのホストにディレクトリを作成する必要がある使用例があります。

例:次の形式の出力で動的インベントリファイルを作成します。

{
   "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のような変数を指定すると、これを行うのが最善であると思います。

同じタスクを繰り返す代わりにループを使用できるより良い解決策はありますか?

7
Shreya Bhat

マジック変数group_namesを使用できます。変数は、現在のホストが含まれるすべてのグループのリスト(配列)です。詳細は documentation を参照してください

- hosts: all
  tasks:
  - name: create db directory
    file: 
      path: "{{ item }}" 
      state: directory
    with_items: "{{ group_names }}"

免責事項:このコードをテストしませんでした。

6
Darney