inqfen
или в разные инвентори, что лучше
Maxim
V
V
у меня ведь два инвентори и они внутри отличаются только списком нод
inqfen
inqfen
переменную env в группе all заведи, если тебе потом надо различать где что
V
гдето взять переменную которая называется prod или stage для всех груп
V
ок
Maxim
Maxim
воркараундом везде
$ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
inqfen
Alex
V
ну я ведь говорю что есть два inventory и есть роль в ней есть файлы в которых в надо прописывать это prod или stage
Alex
а в чем проблема передавать тип окружения через extra vars например?
inqfen
Да и просто в group vars будет работать
Alex
ну либо в инвентори создавать соотв группы
[web-staging]
192.168.1.2 ...
[db-staging]
192.168.1.3 ...
а в роли уже проверять group_names
inqfen
inqfen
1 стейджинг одна прод
Alex
ну правильно, в одном добавлять префикс staging, а в другом prod
inqfen
зачем префикс
inqfen
проще прост переменную сделать
Alex
чтобы не юзать переменную
Alex
но это как вариант
inqfen
То есть все усложняем, чтобы переменную убрать
Timur
inqfen
ну возможно ты ее не используешь
inqfen
И вообще переменные в ини это извращение
V
V
некуда получается
inqfen
/inventory/production/group_vars/all
V
хм у меня не так
V
у меня общий group_vars
Timur
Ребята, научитесь нормально пользоваться группами и их переменными. Большая часть подобных странных задач тут же исчезнет
inqfen
Timur
V
- 2 инвентори (полностью одинаковые кроме списка серверов)
- 1 роль (в ней есть template)
- нужно подставить переменную согласно инвентори (environment=prod/stage)
пока что у меня group_vars/host_vars
один общий на всех так как сервера пока что одинаковые и специфики отделять не было
V
так как у меня отличаются только inventory файлы то подумал что правильно было там добавить переменную , но добавление не дало результата. она не применяется
Timur
V
в j2 template
Timur
Т.е. в динамически формируемый файл должна добавляться строка в зависимости от значения некоторой переменной?
V
Timur
Как ты сейчас определяешь, какие сервера из инвентаря у тебя prod, а какие - stage?
V
только по inventory
один файл зовут
- staging
второй
- production
внутри одинаковые группы
Timur
Понятно. Ну, значит добавь в любую группу инвентаря переменную env_name, например
Timur
И в первом инвентаре дай ей одно значение, а во втором - другое
Timur
Лучше всего в группу all, как говорили выше
Timur
Тогда переменная применится ко всем хостам из инвентаря гарантированно
V
Тогда переменная применится ко всем хостам из инвентаря гарантированно
проблема была в именовании переменной
в inventory такое
env_env=staging
environment=staging
в j2:
environment={{ env_env }}
environment={{ environment }}
а результат вот такой почему то
+environment=staging
+environment=[]
я так понимаю переменная environment уже гдето использоуется ?
Timur
Timur
А, так вы переменную environment использовали?
inqfen
Я же выше писал, что заюзай env
Timur
Timur
https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html
Timur
environment
A dictionary that gets converted into environment vars to be provided for the task upon execution.
inqfen
inqfen
А, ну я опоздал
Timur
По умолчанию словарь, разумеется, пустой
Alex
хмм
Alex
а почему нельзя было написать об этом тут
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
Timur
Timur
Whether or not you define any variables, you can access information about your hosts with the Special Variables Ansible provides, including “magic” variables, facts, and connection variables. Magic variable names are reserved - do not set variables with these names. The variable environment is also reserved.
Alex
omg
inqfen
И ссылка на special variables есть
Alex
ведь чуть выше они перечисляют reserved имена
Alex
как то не логично
inqfen
Не описывать же все в одной доке
Anonymous
в общем дополню коллег ответ, самое правильное разнеси по envirements/staging+prod что разное для окружений? в group_vars оставь только то что оьщее для всех
Anonymous
запускать будешь так ansible-playbook -i environments/staging playbook.yml
Anonymous
это резко снизить объем костылей внутри твоих плейбуков
Sun
ещё раз прошу прощения
Sergey
ничего страшного, бывает