LINUX.ORG.RU

Как в Ansible подключить файл с переменными через конфиг?

 , ,


0

1

Мне нужно использовать несколько «проектов» Ansible, каждый из которых находится в своей директории. Но для этих нескольких «проектов» мне нужно иметь yml-файл с общими переменными.

Я думал, что указать файл с переменными можно в ansible.cfg ( который размещается рядом с плейбуками). Но в документации такой опции не нашел.

Согласно вот этой статье:

https://www.toptechskills.com/ansible-tutorials-courses/ansible-include-impor...

получается, что файл с общими переменными надо прописывать в каждом плейбуке. Но у меня этих плейбуков по 50 штук на каждый проект, не буду же я в каждый плейбук прописывать.

Как-то можно сделать так, чтобы при запуске плейбука он доставал нужный файл с переменными, а не только брал файлы по стандартным путям?

★★★★★

Ответ на: комментарий от anonymous

Нет, не через командную строку. А через конфигурацию.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Меня бы устроил какой-нибудь include с относительным путем, прописанный group_vars/all.yml

Xintrea ★★★★★
() автор топика

Почему через командную нельзя?

Костыльни через shell:

$ cat ~/bin/ansible-playbook
#!/bin/sh

/usr/bin/ansible-playbook "$@" -e "@/path/to/common_variables.yml"
$ export PATH=~/bin:$PATH
anonymous
()

Отринуть какаху и возлюбить NixOS.

anonymous
()

Ansible нормально относится к символьным ссылкам. Т.е. можно из общего места линкануть yml с переменными или инвентарём.

Также можно инвентори подтягивать в таких написаниях:

-i inventory/
-i inventory/list1.yml -i inventory/list2.yml

Главное, красиво иерархии составить.

Вот тут вроде дельные примеры: https://stackoverflow.com/questions/58651943/can-an-ansible-inventory-include...

NDfan
()

плейбуков по 50 штук на каждый проект

Что-то борщ какой-то, если честно! Предполагаю неоптимальное использование таких рулезов, как тэги, группы ролей, вложенные плейбуки.

NDfan
()
Ответ на: комментарий от anonymous

Почему через командную нельзя?

Потому что проект должен быть переносимым. Скопировал каталог, и запустил плейбуки на любом Линуксе, без перенастройки окружения и без специальных команд запуска.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от NDfan

Предполагаю неоптимальное использование таких рулезов, как тэги, группы ролей, вложенные плейбуки.

Многие плейбуки долго выполняются, поэтому нужно иметь возможность запуститься «с середины процесса», причем где эта середина - зависит от ситуации. И остановиться нужно тоже на определенном этапе процесса.

У меня куча плейбуков, каждый на один маленький шаг, и я их могу запускать как хочу, даже настроил запуск по Enter чтоб с консольными командами не возиться. Тэги, группы ролей, вложенные плейбуки не дают такого удобства - чтобы запуститься с нужного места и остановиться в нужном месте, нужно будет либо постоянно влезать в исходники, либо высчитывать начало-конец процесса и прописывать их в командной строке. И если с началом все более-менее ясно, то определить шаг на котором надо остановиться не всегда возможно заранее.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Я как-то стараюсь всё же добавлять защиты и ветвить логику через булевы переменные (типа ansible-playbook <...> -e nginx_reload=false ), и результат предыдущего шага ( register: contents ---> when: contents.stdout == «» ). Плюс, у каждого таска куча тегов, как минимум с названием роли.

Ну не спорю, у твоего подхода есть своя правда, конечно.

NDfan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.