inqfen
или в разные инвентори, что лучше
Maxim
Подозреваю, что это в системных либах что-то фейлится?...
в анзибле <= 2.3 работает, дальше - ломается
V
у меня ведь два инвентори и они внутри отличаются только списком нод
inqfen
переменную env в группе all заведи, если тебе потом надо различать где что
V
гдето взять переменную которая называется prod или stage для всех груп
V
ок
Sergey
в анзибле <= 2.3 работает, дальше - ломается
Люто. Тогда, видимо, diff для модуля смотреть, хотя и удивительно. М.б. virtualenv'ы кривые где-то? Issues на гитхабе есть?
Maxim
воркараундом везде $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
inqfen
гдето взять переменную которая называется prod или stage для всех груп
тебе сделать, ансибл же не угадает ге у тебя что
V
тебе сделать, ансибл же не угадает ге у тебя что
я вот такую завел [all:vars] environment=staging но вроде не отработало
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
1 стейджинг одна прод
Alex
ну правильно, в одном добавлять префикс staging, а в другом prod
inqfen
зачем префикс
inqfen
проще прост переменную сделать
Alex
чтобы не юзать переменную
Alex
но это как вариант
inqfen
чтобы не юзать переменную
чтобы читать другую переменную и вычленять из нее кусок ты хотел сказать
inqfen
То есть все усложняем, чтобы переменную убрать
V
проще прост переменную сделать
я может подзабыл но почему то [all:vars] env=prod не отработало не показывает эту переменую
inqfen
ну возможно ты ее не используешь
inqfen
И вообще переменные в ини это извращение
V
И вообще переменные в ини это извращение
так тогда я запутался куда ее класть?
V
некуда получается
inqfen
/inventory/production/group_vars/all
V
хм у меня не так
V
у меня общий group_vars
inqfen
некуда получается
А, ну вот у меня в этом некуда десятки переменных
Timur
Ребята, научитесь нормально пользоваться группами и их переменными. Большая часть подобных странных задач тут же исчезнет
inqfen
Ребята, научитесь нормально пользоваться группами и их переменными. Большая часть подобных странных задач тут же исчезнет
да тут можно и не учиться, есть бест практис со структорой которую умные люди описали прямо на сайте ансибла
V
- 2 инвентори (полностью одинаковые кроме списка серверов) - 1 роль (в ней есть template) - нужно подставить переменную согласно инвентори (environment=prod/stage) пока что у меня group_vars/host_vars один общий на всех так как сервера пока что одинаковые и специфики отделять не было
V
так как у меня отличаются только inventory файлы то подумал что правильно было там добавить переменную , но добавление не дало результата. она не применяется
V
в j2 template
Timur
Т.е. в динамически формируемый файл должна добавляться строка в зависимости от значения некоторой переменной?
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
А, так вы переменную environment использовали?
inqfen
Я же выше писал, что заюзай env
V
А, так вы переменную environment использовали?
да я не знал что есть какой то список переменных которые нельзя
V
Я же выше писал, что заюзай env
да ты писал но я думал это как "любое имя для переменной"
Alex
А, так вы переменную environment использовали?
а что не так с environment ? Оно вроде не reserved
Timur
https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html
V
а что не так с environment ? Оно вроде не reserved
ага походу резервед потому что я убрал букву t в конце и все заработало тоже
Timur
environment A dictionary that gets converted into environment vars to be provided for the task upon execution.
inqfen
а что не так с environment ? Оно вроде не reserved
туда env переменные для таска записываются
inqfen
А, ну я опоздал
Timur
По умолчанию словарь, разумеется, пустой
Alex
хмм
Alex
а почему нельзя было написать об этом тут https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
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
ничего страшного, бывает