У меня есть инвентарь 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 }}"