Ниже приведена «рабочая» версия, в которой я определяю конфигурацию в своем файле инвентаризации: Файл инвентаризации:
all:
children:
grp1:
hosts:
host1:
grp2:
children:
subgrp1:
vars:
config_vars:
name1: "value1"
name2: "value2"
hosts:
host11:
host12:
subgrp2:
vars:
config_vars:
name1: "value3"
name2: "value4"
hosts:
host21:
host22:
grp3:
hosts:
host31:
host32:
Моя книга воспроизведения выглядит следующим образом:
---
- name: test play
hosts: grp2
connection: ssh
gather_facts: no
remote_user: ec2-user
tasks:
- debug:
msg: "inventory_hostname = {{ inventory_hostname}} and item.key = {{ item.key }} and value = {{ item.value }} "
when: "{{ item['key'] }} == config_vars "
loop: "{{ lookup('dict', hostvars[inventory_hostname]) }}"
После запуска ansible-playbook -i hosts.yml p1.yml
У меня есть:
ok: [host22] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
...
ok: [host21] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
...
ok: [host11] => (item={'key': 'config_vars', 'value': {'name1': 'value1', 'name2': 'value2'}}) => {
...
ok: [host12] => (item={'key': 'config_vars', 'value': {'name1': 'value1', 'name2': 'value2'}}) => {
(посмотрите, как значения name1 и name2 совпадают в соответствии с конфигурацией каждой группы)
«Неработающая» конфигурация, которую я имею, - это где я удаляюconfig_vars из моего файла инвентаря, и вместо этого имеют структуру каталогов, соответствующую структуре hosts.yml, и config_vars dict вставляется в каталог каждой группы
> cat group_vars/grp2/subgrp2/main.yml
config_vars:
name1: "value3"
name2: "value4"
> cat group_vars/grp2/subgrp1/main.yml
config_vars:
name1: "value1"
name2: "value2"
Затем я снова запускаю команду, как и раньше, и вижу:
ok: [host22] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host12] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host21] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host11] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
(значения1 и значение2 помечены)
Я вроде знаю, почему это происходит;это потому, что значения3 и значение4 читаются позже, поэтому они заменяют значение 1 и значение2. Мой вопрос: как я могу сохранить привязку группы к конфигу, когда я структурирую свою организацию переменных следующим образом. Также было бы хорошо, если бы я сделал это любым другим способом, но вытащил переменные из файла инвентаризации. Большое спасибо заранее