контейнеров!!! ремарка 2, да энсибл отнюдь не CD тульза(говорил и не раз, но задача есть, надо делать)
1. в ролях могут быть переменные которые должны быть явно указаны? (defaults для универсальных ролей опасная штука и не могу объяснить, но мне вызывает диссонанс defaults-> main.yml)
2. когда можно использовать when в ролях? я в данный момент указал его для таких моментов как - если переменная задана (when: role_prio_containers is defined and is_switchover is not defined)
3. насколько правильно указывать в переменных ansible_python_interpreter ?
вот сами примеры по каждому вопросу -
1. ну тут и без примера ясно, что у меня переменные которые явно должны быть обозначены в инвентори
просто спор с тимой, что дословно - роль независимая единица и типа везде всегда при запуске заработает без указание в инвентори (или еще где) переменных.
я тут немного не понимаю и примеры не помогают, мож реально не париться и везде в defaults запихать переменные на пофиг, особенно где docker_image = на какой нибудь безобидный докер образ
2. = = =
а) у нас есть прод кластер и мы его переключаем через переменную в инвентори is_standby = true|false (при свитоверах всегда его ручками задаём где хотим поднять активное плечо)
и вот в тестовых средах где у меня только по одному плечу, данной переменной нет
я задаю эту переменную прям в group_vars этой тестовой среды
is_switchover = false, так как в ролях прописал что запускаем контейнер только на активном плече
б) + ввёл новую переменную
when: is_switchover
(отдельный плейбук switchover.yml, который так же запускает эту роль, но с заданной переменной is_switchover), это для случаев когда во время свитчовера хочу тушить на активном плече и поднимать на стэндбай плече. нутром чувствую что это можно следать изящнее, но при свитчоверах мне надо именно перед запуском контейнера чистить сессионые и композитные кэшы
3. указываю прям в group_vars и/или в плэйбуках
ansible_python_interpreter: /usr/bin/python36
1. Не понятен вопрос, все переменные используемые во время выполнения плейбука обязательны, если не указано к примеру "{{ used_var | defaults(44) }}". Роль самостоятельная единица, defaults на то и созданы чтобы без указания переменных роль все равно работала на настройках по умолчанию. Если docker_image используется в цикле, можно указать docker_image = [], он пропустит эту таску без ошибок. 2. Когда нужна какая-либо проверка. Подробнее: https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html 3. Хотите указывайте чтобы он использовал определенную версию питона которая у вас установленна, не хотите не ставьте, найдет автоматически.
норм, спасибки но говорю же, противен сам defaults, не знаю почему вдруг стало триггерить от него, как будто правильнее что б упал плейбук и что б заглянули в README, а не запускали впустую (типа псевдо защита) и да, где можно, сразу указал в тасках "{{ var | d('5432') }}"
Кстати, валидный аргумент. Хочешь запустить роль - сделай кастомы
да, но сам ты конечно так делать не будешь 😅😂
Не хочешь when поменять на группы? Или не получится? Я так понял, ты какое-то кластерное решение разворачиваешь. Постгрес какой-то. Или бекенды балансишь. Почему не разбить на группы active: host11, host12, host13 passive: host21, host22, host23
переключение хадуп кластера ну и есть самописанные сервисы, которые запускаем в докере именно при свитчоверах надо чистить сессионные и композитные кэши, иначе он поднимет с дисков старые, ну и будет не очень хорошо
Здесь спору нет. Просто похоже, что если нужно выполнять какие-то действия по условию - без when не обойтись. С другой стороны - а зачем тут ансибл вообще? Можно было пайтон скрипт или сервис намонстрячить, который делает перезапуск сервисов или их отключение, с проверкой ошибок. А из ансибла его просто пинать. По аналогии с патрони. Ты же не будешь патрони на ансамбль переписывать? Правда?
У нас в дефолтах роли всегда some_role: [] и таски в роли тупо пропустятся, если для хоста/группы не задана конфигурация.
Обсуждают сегодня