Считать значение переменной из group_vars в ansible - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь прочитать значение переменной из групповых варов. Но ansible не может найти значение.

Моя папка инвентаря выглядит так:

prod.ini
uat1.ini
uat2.ini

мой uat1.ini выглядит так:

[server a]
12.12.12.12

[server b]
13.13.131.1

my uat2.ini выглядит так:

[server a]
1.1.1.2

[server b]
2.23.12.5

папка групповых переменных выглядит так:

 all
 environment

внутри папки среды у меня есть подпапки, которые

uat1 and uat2

в uat1 и uat2 у меня есть файл с именем pick.yml

для uat1 у меня ниже pick.yml

modern: "re run"

для uat2 у меня есть ниже pick.yml

modern: "no re run"

my playbook выглядит так:

- name: try and run to get the value of group vars
  hosts: server a
  debug:
     var: modern

Я запускаю свою playbook, используя следующую команду:

 ansible-playbook -i inventory/uat2.ini  -b playbookname

я ожидаю, что он должен вернуть значение из uat2, которое является «no re run». но не может вернуть то. Но когда я помещаю эти групповые переменные в group_vars / all, playbook может их прочитать.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Убедитесь, что ваша иерархия правильная: Ansible автоматически загрузит переменные из group_vars (путь по умолчанию /etc/ansible/group_vars).

В вашем случае есть 3 группы: all, server a и server b.

Предполагая, что в группе server a есть хост с именем «server_a», для этого хоста будут загружены следующие переменные group_vars (по умолчанию, только если эти файлы существуют):

/etc/ansible/group_vars/all.yml
/etc/ansible/group_vars/<group name>.yml
{{ playbook_dir }}/group_vars/all.yml
{{ playbook_dir }}/group_vars/<group name>.yml

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

пример иерархии для вашего варианта использования:

/etc/ansible/group_vars:
    all.yml
    server a.yml
    server b.yml
1 голос
/ 08 мая 2020

Согласно https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing -host-and-group-variables :

Ansible загружает файлы переменных хоста и группы, выполняя поиск путей относительно файла инвентаризации или файл playbook. Если ваш файл инвентаря в / etc / ansible / hosts содержит хост с именем 'foosball', который принадлежит к двум группам, 'raleigh' и 'webservers', этот хост будет использовать переменные в файлах YAML в следующих местах:

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

Вы также можете создавать каталоги, названные в честь ваших групп или хостов. Ansible прочитает все файлы в этих каталогах в лексикографическом порядке. Пример с группой raleigh:

/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings

В вашем случае папка environment - это имя группы. Поскольку у вас нет группы environment, она не используется. Кроме того, группы с именами uat1 и uat2 не существуют, поскольку запасы не являются группами.

Групповые переменные all работают, потому что это специальная группа по умолчанию:

Есть две группы по умолчанию: все и разгруппированные. Группа all содержит каждый хост.

Похоже, вы хотите иметь набор переменных для каждого инвентаря. Что вы можете сделать в этом случае, так это установить переменные в инвентаре для группы all:

[all:vars]
modern="re run"

[server a]
12.12.12.12

[server b]
13.13.131.1

, которые применили бы modern var ко всем хостам в этом c инвентаре.

В качестве альтернативы, если вы уже используете две инвентаризации, более похожие на группы, вы можете рассмотреть возможность объединения хостов в единую инвентаризацию и создания групп uat1 и uat2, например:

[server a]
12.12.12.12
1.1.1.2

[server b]
13.13.131.1
2.23.12.5

[uat1]
12.12.12.12
13.13.131.1

[uat2]
1.1.1.2
2.23.12.5

В этом случае у вас могут быть файлы group_vars/uat1 и group_vars/uat2.

Надеюсь, эти две идеи дадут вам лучшее представление о том, как использовать группы и групповые переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...