Ansible playbook group_var переопределяется ролью var

В существующем проекте я заменяю сценарий подготовки bash на ansible - сначала через Vagrant, а затем развертываю его для промежуточных / продвинутых серверов после того, как устранены изломы.

Эта проблема...

Согласно доступным документам при приоритете переменных group_vars должен переопределять переменные роли, но я вижу обратное.

Соответствующие файлы ...

Ниже приводится отрывок из моего Vagrantfile (в корне проекта):

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "app/config/provision/provision.yml"
end

Я указываю его на playbook несколькими подкаталогами вниз, так как я работаю в существующей кодовой базе с ее собственными практиками и не могу оставлять доступный материал загроможденным в корне. Рассматриваемый сценарий:

# app/config/provision/provision.yml
---
- hosts: all
  gather_facts: yes
  sudo: true

  roles:
    - apache
    - php

  post_tasks:
    - debug: var=vagrant_ansible_test_loading_vars
    - debug: var=apache_listen_ports

Обратите внимание на операторы отладки для двух переменных, оба из которых определены в файле group_vars вместе с playbook:

# app/config/provision/group_vars/all
---
vagrant_ansible_test_loading_vars: "lorem ipsum"

apache_listen_ports:
  - 80
  - 8080

Роль apache, которую я использую, определяет значения по умолчанию (которые должны иметь НАИМЕНЬШИЙ приоритет):

# app/config/provision/roles/apache/defaults/main.yml
---
apache_listen_ports: [ 80, 8080 ]

Эта же роль также определяет vars (которые должны иметь ВТОРОЙ самый низкий приоритет):

# app/config/provision/roles/apache/vars/main.yml
---
apache_listen_ports: [ 80 ]

(Неожиданный) результат

И все же после vagrant up я получаю следующее:

TASK: [debug var=vagrant_ansible_test_loading_vars] *************************** 
ok: [default] => {
    "vagrant_ansible_test_loading_vars": "lorem ipsum"
}

TASK: [debug var=apache_listen_ports] ***************************************** 
ok: [default] => {
    "apache_listen_ports": [
        80
    ]
}

Первая определяемая переменная, имеющая исходное значение, сообщает мне, что мой файл group_vars загружается. Вторая переменная была переопределена из значения group_vars, с (по-видимому) значением из переменных ролей.


person EvanK    schedule 20.10.2014    source источник


Ответы (1)


Переменные в ролях / rolename / vars / main.yml имеют ОЧЕНЬ высокий приоритет. Они считаются константами и не могут быть изменены без изменения роли. роли / rolename / defaults / main.yml имеют низкий приоритет и являются просто значениями по умолчанию, которые можно легко изменить.

person Tybstar    schedule 21.10.2014