web-dev-qa-db-ja.com

group_varsを使用した異なるグループのAnsible同じホスト

次のような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のバグですか、それとも何か不足していますか?

2
trikelef

実際には、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 }}"
3
TheDESTROS