次のようなAnsibleインベントリがあります。
[group1]
Host1.mydomain
[maingroup:children]
group1
[group2]
Host1.mydomain
このホストには2つの同様のサービスが併置されているため、異なるグループで同じホストを宣言する必要があります。 2つのサービスを区別するために、次のグループ変数を作成しました。
group_vars/maingroup
---
servicepath: /service1/path
group_vars/group2
---
servicepath: /service2/path
最初にhosts: maingroup
でプレイブックを実行し、次に同じプレイブックをhosts: group2
で実行すると、毎回正しいservicepath
変数値が使用されました(最初の実行= /service1/path
、2番目の実行) = /service2/path
)。
ただし、maingroup
を使用してPlaybookを実行すると、その後のすべての再試行で値servicepath: /service2/path
が取得されました
私は--extra-vars=@group_vars/group2
ansible-playbookパラメーターを使用して、正しい変数でプレイブックを実行することしかできませんでした。
これはAnsibleのバグですか、それとも何か不足していますか?
実際には、ansibleは変数の値をグループではなくホストにバインドします。つまり、1つのホスト上の1つの変数に対して存在できる値は1つだけです。
ホストの変数の値を毎回上書きするためにこれを試してください:
---
- hosts: "{{ hosts }}"
vars_files:
- group_vars/{{ hosts }}.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "{{ hosts }}"
vars_files:
- group_vars/{{ hosts }}.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
ここで、{{hosts}} = "maingroup"または "group2"
例:
---
- hosts: "maingroup"
vars_files:
- group_vars/maingroup.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "group2"
vars_files:
- group_vars/group2.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"
- hosts: "maingroup"
vars_files:
- group_vars/maingroup.yml
tasks:
- name: my command
command: "command with {{ servicepath }}"