Назад | Перейти на главную страницу

Неспособный один и тот же хост в разных группах с group_vars

У меня есть инвентарь Ansible, подобный следующему:

[group1]
host1.mydomain

[maingroup:children]
group1

[group2]
host1.mydomain

Мне нужно объявить один и тот же хост в разных группах, поскольку на этом хосте расположены две похожие службы. Чтобы различать эти две службы, я создал следующие групповые переменные:

group_vars/maingroup
---
servicepath: /service1/path

group_vars/group2
---
servicepath: /service2/path

Когда я впервые запускаю playbook с hosts: maingroup, затем тот же сценарий с hosts: group2, он использовал правильный servicepath значение переменной каждый раз (первый запуск =/service1/path, второй прогон =/service2/path).

Однако во всех последующих попытках, когда я запускаю playbook с maingroup Я получил ценность servicepath: /service2/path

Мне удалось запустить playbook с правильными переменными с --extra-vars=@group_vars/group2 параметр ansible-playbook.

Это может быть ошибка Ansible или я что-то упускаю?

Дело в том, что ansible связывает значение переменных с хостом, а не с группой. То есть на одном хосте может быть только одно значение для одной переменной.

Попробуйте это просто, чтобы каждый раз переопределять значение переменной на хосте:

---
- 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 }}"