Antivible group_vars precedence variável (group_vars sobrescreve outros group_vars)

5

No Ansible 2.2,

Eu tenho um arquivo de hosts Ansible:

[webserver]
aegir.dev

[hostmaster]
aegir.dev

Eu tenho dois arquivos group_vars/ :

# group_vars/webserver.yml
my_var:
  - vagrant

e

# group_vars/hostmaster.yml
my_var:
  - vagrant
  - aegir

e o manual:

- hosts: webserver
  tasks:
    - debug: var=my_var

- hosts: hostmaster
  tasks:
    - debug: var=my_var

Saída:

PLAY [webserver] ***************************************************************

TASK [setup] *******************************************************************
ok: [aegir.dev]

TASK [debug] *******************************************************************
ok: [aegir.dev] => {
    "my_var": [
        "vagrant",
        "aegir"
    ]
}

PLAY [hostmaster] **************************************************************

TASK [setup] *******************************************************************
ok: [aegir.dev]

TASK [debug] *******************************************************************
ok: [aegir.dev] => {
    "my_var": [
        "vagrant",
        "aegir"
    ]
}

Por que webserver e hostmaster usam as variáveis de hostmaster.yml ?

Provavelmente não estou usando o group_vars corretamente, mas como posso consertar isso?

EDITAR

O cenário real é que eu tenho a mesma função em dois grupos, um é webserver que na verdade contém 4 servidores genéricos e o grupo hostmaster que é um servidor da Web + configuração extra na mesma função (o usuário aegir existe apenas no aegir.dev e não nos outros 3 servidores web)

    
por tvl 21.11.2016 / 16:02

1 resposta

3

Esse é o comportamento esperado. Veja a documentação :

Within any section, redefining a var will overwrite the previous instance. If multiple groups have the same variable, the last one loaded wins. If you define a variable twice in a play’s vars: section, the 2nd one wins.

    
por 21.11.2016 / 16:10

Tags