Ansible не захватывает group_vars, не загружая его вручную.

В моем local.yml я могу запустить playbook и ссылочные переменные в group_vars/all, но я не могу получить доступ к переменным в group_vars/phl-stage. Предположим следующее.

ansible-playbook -i phl-stage site.yml

У меня есть переменная, позвольте ей deploy_path, которая отличается для каждой среды. Я помещаю переменную в group_vars/< environment name >. Если я включаю файл group_vars/phl-stage внутри vars_files, он работает, но я бы подумал, что файл группы будет автоматически загружен?

site.yml

- include: local.yml

local.yml

- hosts: 127.0.0.1
  connection: local

  vars_files:
    - "group_vars/perlservers"
    - "group_vars/deploy_list"

group_vars/PHL-ступенчатый

[webservers]
phl-web1
phl-web2

[perlservers]
phl-perl1
phl-perl2

[phl-stage:children]
webservers
perlservers

Структура каталогов:

group_vars
  all
  phl-stage
  phl-prod
site.yml
local.yml

Ответ 1

Вы немного путаете структуру.

  • Каталог group_vars содержит файлы для каждой группы хостов, определенной в вашем файле инвентаря. Файлы определяют переменные, которые могут использовать члены-члены.
  • Файл инвентаризации не находится в директории group_vars, он должен быть снаружи.
  • Только хосты, которые являются членами группы, могут использовать свои переменные, поэтому, если вы не поместите 127.0.0.1 в группу, он не сможет использовать какие-либо group_vars рядом с теми, которые определены в group_vars/all.

Что вы хотите, это структура этого каталога:

group_vars/
   all
   perlservers
   phl-stage
hosts
site.yml
local.yml

Файл ваших хостов должен выглядеть так, предполагая, что 127.0.0.1 - это только промежуточный сервер, а не perl или веб-сервер:

[webservers]
phl-web1
phl-web2

[perlservers]
phl-perl1
phl-perl2

[phl-stage]
127.0.0.1

[phl-stage:children]
webservers
perlservers

Итак, вы определяете, какие хосты принадлежат к какой группе в инвентаре, а затем для каждой группы вы определяете переменные в файле group_vars.