No Ansible 2.16.8 em um Mac (M1) executando Python 3.12.4 (via homebrew), estou tentando configurar um group_vars/all.yml global que pode ser substituído por inventory/x/group_vars/all.yml se necessário. No entanto, parece que o arquivo global está substituindo os valores específicos do inventário.
Dado o seguinte arquivo:
# group_vars/all.yml
level: global all
# inventory/x/group_vars/all.yml
level: inventory all
# inventory/x/group_vars/test.yml
level: inventory group
E correndo:
ansible all -i inventory/x -m debug -a "var=level" -o
Eu entendo:
test-host | SUCCESS => { "changed": false, "level": "inventory group" }
non-test-host | SUCCESS => { "changed": false, "level": "global all" }
Mas espero obter:
test-host | SUCCESS => { "changed": false, "level": "inventory group" }
non-test-host | SUCCESS => { "changed": false, "level": "inventory all" }
A precedência de playbook adjacente group_vars sobre inventory group_vars é o comportamento esperado . Os desenvolvedores do Ansible consideram o playbook mais específico. Considere o exemplo de plays diferentes, substituindo o mesmo valor, mas para grupos diferentes.
Mova seu inventário group_vars/all para qualquer outro group_vars do grupo. O grupo all é especial e tem prioridade mais baixa, para ambos os lugares você pode colocar group_vars.
Ou não confie na precedência de variáveis. Use nomes diferentes para lugares diferentes em que uma coisa é definida e escolha qual deles em uma expressão de filtro.