Nklya
Я такое делал для деплоя war'ников в томкат, нормально выглядит
Evgeniy
https://stackoverflow.com/questions/25694249/ansible-using-with-items-with-notify-handler
Evgeniy
Нужен. Сейчас мне приходится пилить такую конструкцию зачастую:
- name: Generate {{ daemon }}
template: ..
- name: Reload systemd
systemd: ..
Помоему это проще:
- name: Generate {{ daemon }}
template: ..
handler: restart_systemd {{ daemon}}
Evgeniy
не то?
Evgeniy
А у меня задача прочитать переменные из файла - не важно на локальном компе или на удаленном и использовать эти переменные, чтобы затем на удаленной машине пополнять конфиги в соотв. строках
не подскажите, как реализовать?
Evgeniy
я так понял ансибл читает из yaml или json
Evgeniy
а нужно из простого файлика txt, который правит юзер
Evgeniy
можно, конечно генерировать его в yaml или json или т.д. но может подскажите, что удобнее?
Evgeniy
я не прошу кода, достаточно лишь ключевых слов, куда копать)
Ievgen
Yaml хорошо читаем и достаточно прост, совсем не вариант научить юзера делать в тхт файлике что то типа:
variable: value
?
Evgeniy
думаю, так и буду делать, нормальный вариант
а если будут задачи брать на удаленной машине - то конвертировать в json\yaml каким-нибудь скриптом...
Evgeniy
нужно будет просить юзера заполнить var, а затем проверить еще эти значения, видимо внешним скриптом... ай, ладно
как-нибудь сделаю)
Vladimir
Evgeniy
как я понял, он все переменные отдаст как контент, а переменные разные и их около 10, а не 1
Alexander
ShadoWalkeR
А зачем жестко прописывать зависимости? Просто если чтото заставит рестартануть target (например кривые руки эксплуатации), от которого жестко зависят все сервисы, то они тоже рестартанут.
ShadoWalkeR
А друг от друга сервисы не зависят
Vladimir
а почему ты массивом то не хочешь сделать список
ShadoWalkeR
А почему вы уверенны что у меня не так?
Vladimir
- name: Generate {{ item }}
template: ..
with_items: ....
Vladimir
и не нужны никакие хендлеры.
ShadoWalkeR
У меня для разных типов сервисов разные правила генерации - гдето достаточно только имени, гдето нужно описать дополнительные параметры - и список слов превращается в список списков.
Хэндлер хотел использовать чтобы уйти от block/include_tasks - вместо двух шагов выполнять 1
ShadoWalkeR
Вообще самое позорное что могли разрабы ансибла придумать - директиву block. Loop на нее повесить нельзя (потому что это не нужно по словам разрабов), name, на который блок вешается, в лог не выводится. Поэтому его выполнение в логе выглядит не как:
block: Generate daemon {{name}} -> template -> systemd
А просто
template -> systemd
ShadoWalkeR
Хочешь пояснений? Вешай на каждое действие в блоке name
ShadoWalkeR
И в итоге вместо аккуратной группировки получается эталонная херня
Nklya
каждый таск должен быть с name, вот и все
Nklya
тебе даже ansible-lint об этом скажет
Vadim
ShadoWalkeR
каждый таск должен быть с name, вот и все
Зачем? Что если я хочу несколько таск сгруппировать логически? Просто пример:
- name: Generate monitoring target
template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- name: Generate monitoring failure service
template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- name: Generate monitoring probe
template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service
Nklya
ну вот и группируй их в блок, если очень надо
ShadoWalkeR
Казалось бы логично что я могу их объединить через block в одну таску:
- name: Generate monitoring infrastructure.
block:
- template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service
ShadoWalkeR
Но изза ебанутой реализации блока приходится делать так:
- name: Generate/Re-Generate monitoring infrastructure.
block:
- debug:
msg: Generate/Re-Generate monitoring infrastructure.
- template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service
Vadim
а чем with_items \ lookup не походит?
Nklya
логично-не логично, код открытый, идешь и смотришь, можно ли творить такую дичь
ShadoWalkeR
Не знаю для какой версии тот пример со stack overflow но в 2.6 хэндлер дергается 1 раз после отыгрывания всего плейбука. И если один и тот же хэндлер вызывается для разных переменных, то он выполнится только для самой последней.
Если бы у меня был просто один список сервисов это бы полностью устраивало, но этого нет.
ShadoWalkeR
Evgeniy
Не знаю для какой версии тот пример со stack overflow но в 2.6 хэндлер дергается 1 раз после отыгрывания всего плейбука. И если один и тот же хэндлер вызывается для разных переменных, то он выполнится только для самой последней.
Если бы у меня был просто один список сервисов это бы полностью устраивало, но этого нет.
печально, спасибо что проверил, у меня руки еще не дошли, учусь пока что
да и вообще я сделал выводы, что ансибл скорее всего буду использовать связкой: питон поверх ансибла, там и проверить пользовательские переменные введенные можно и самому сгенерировать хендлеры и все таски похожие генерировать функциями. Роли мне не понравились...
если будут нерешаемые корявости - вообще буду чисто питон использовать с его родными модулями для тех же задач, что и ансибл
хотя, возможно, сказывается малый опыт использования этого инструмента у меня и непонимание многого, роли вообще не понял зачем нужны...
У меня конкретные задачи: 1 раскатать ПО из набора сервисов на хост, подменить переменные в конфиге на пользовательские. Хосты разные и не связаны с друг другом. Это виделось мне одним плейбуком.
2. Точно также, что выше- но связанные хосты с сервисами
(в первом случае однонодовая инсталяция, во втором- многонодовая)
Nklya
ну так и делаешь блин одну роль и вызываешь ее для разных хостов потом с разными именами
Nklya
нахера это лепить одной сраной простыней на ямле?
ShadoWalkeR
печально, спасибо что проверил, у меня руки еще не дошли, учусь пока что
да и вообще я сделал выводы, что ансибл скорее всего буду использовать связкой: питон поверх ансибла, там и проверить пользовательские переменные введенные можно и самому сгенерировать хендлеры и все таски похожие генерировать функциями. Роли мне не понравились...
если будут нерешаемые корявости - вообще буду чисто питон использовать с его родными модулями для тех же задач, что и ансибл
хотя, возможно, сказывается малый опыт использования этого инструмента у меня и непонимание многого, роли вообще не понял зачем нужны...
У меня конкретные задачи: 1 раскатать ПО из набора сервисов на хост, подменить переменные в конфиге на пользовательские. Хосты разные и не связаны с друг другом. Это виделось мне одним плейбуком.
2. Точно также, что выше- но связанные хосты с сервисами
(в первом случае однонодовая инсталяция, во втором- многонодовая)
Лучше на логические блоки разбить и из них собирать таски, а в main оставить только какую таску вызвать
ShadoWalkeR
И конфиги лучше генерировать из j2 шаблонов
Evgeniy
Разве одна простыня на yaml читаемее меньшей простыни на yaml с походами в директории и чтения отдельных, маленьких yaml? - с IDE это будет еще читаемо, а вот кто использует чисто консоль- печаль.
Генерировать питоном (как это делает jinga) - не правильный подход?
Мне второй вариант больше нравится именно из-за возможности использования регулярок для проверки variables, т.к. на разных хостах они разные
или лучше просто сначала запускать проверку var, а затем просто использовать ansible?
Вообщем сложно что-то заранее решить без опыта)
ShadoWalkeR
ShadoWalkeR
j2 - и есть jinja2 шаблоны
Evgeniy
генерировать с j2 удобнее, чем просто формировать yaml функциями с питона(другого_яп)?
Joe
Всем привет, подскажите как сделать чтобы к client01.csr подписывался ip ноды на которой он сгенерировался?
10.0.0.1-client01.csr
http://telegra.ph/ansible-07-18
Joe
ip получаем с eth0
Evgeniy
Joe
Sergey
Sergey
Есть штатные средства для подтягивания хост-зависимых переменных, host_vars называется
ShadoWalkeR
Можно. Но мне надо через include_vars 😃
Nklya
Надо доклад сделать про это
Sergey
Можно. Но мне надо через include_vars 😃
Да, согласен, в магазин можно и на одной ноге допрыгать, держа вторую рукой за пятку. Однако разработчиком предусмотрены штатные, более простые и удобные средства - тупо идти двумя ногами.
Достаточно прозрачная аналогия?
Nklya
будет сильный конкурент тому, что в баду генерируют
ShadoWalkeR
Vadim
помните - жгут выше артерии, но ниже вены
ShadoWalkeR
Например политика написания плебуков для ансибла, которая от меня не зависит?
Nklya
вот еще более прозрачная аналогия
http://i.imgur.com/QBPfJAl.jpg
Nklya
Sergey
А вы не думали что может быть есть какие то причины, которые не позволяют host_vars использовать?
Думал. "У нас есть очень веские причины чистить зубы не зубной щёткой, а топором" - это уж как угодно, просто порезы дёсен обычно будут глубокими, кровоточащими и долго заживающими. Да, я знаю, что, в принципе, существуют люди, которые почистят зубы топором лучше, чем условный я - зубной щёткой, но, кажется, здесь другой случай.
Дело в том, что минимум раз в три дня сюда, в чат по Ансиблу, забегает недовольный человек с тонной критики, а на поверку оказывается, что он обвиняет инструмент в проблемах процессов в его организации, или (реже) в диком неумении/нежелании читать маны и изучать инструмент.
Sergey
гиф припас, спасибо 😊
ShadoWalkeR
Думал. "У нас есть очень веские причины чистить зубы не зубной щёткой, а топором" - это уж как угодно, просто порезы дёсен обычно будут глубокими, кровоточащими и долго заживающими. Да, я знаю, что, в принципе, существуют люди, которые почистят зубы топором лучше, чем условный я - зубной щёткой, но, кажется, здесь другой случай.
Дело в том, что минимум раз в три дня сюда, в чат по Ансиблу, забегает недовольный человек с тонной критики, а на поверку оказывается, что он обвиняет инструмент в проблемах процессов в его организации, или (реже) в диком неумении/нежелании читать маны и изучать инструмент.
И из всего что я сегодня высказал вы докапываетесь только до одной фразы сказанной как пример. Могу считать что со всеми остальными аргументами вы согласны
Nikita
Оооо
Nikita
Холиварчик
Nikita
Joe
Лучше будет если, этот IP при гнерации файла я буду получать из переменной "ansible_host=" как это сделать?
Sergey
Sergey
или речь шла о штатной переменной?
ShadoWalkeR
Я вижу многие из присутствующих любят делать далеко идущие выводы на основе пары фраз, вырванных из контекста.
Vladimir
Тебе уже дали рядж советов
Vladimir
ты продолжаешь гнуть свою линию
ShadoWalkeR
ShadoWalkeR