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

Ansible приоритет переменной group_vars (group_vars переопределяет другие group_vars)

В Ansible 2.2

У меня есть файл Ansible hosts:

[webserver]
aegir.dev

[hostmaster]
aegir.dev

у меня есть два group_vars/ файлы:

# group_vars/webserver.yml
my_var:
  - vagrant

и

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

и пьеса:

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

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

Вывод:

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

Почему оба webserver и hostmaster используйте переменные из hostmaster.yml?

Наверное, я не использую group_vars правильно, но как я могу это исправить?

РЕДАКТИРОВАТЬ

Реальный сценарий состоит в том, что у меня одна и та же роль выполняется в двух группах, одна из которых webserver который на самом деле содержит 4 общих сервера и hostmaster группа, которая является веб-сервером + дополнительная конфигурация для той же роли (пользователь aegir существует только на aegir.dev, а не на трех других веб-серверах)

Это ожидаемое поведение. Видеть документация:

В любом разделе переопределение переменной перезапишет предыдущий экземпляр. Если несколько групп имеют одну и ту же переменную, выигрывает последняя загруженная. Если вы дважды определите переменную в разделе play's vars :, победит вторая.