inqfen
хотя там версия зафиксирована
inqfen
да, если у тебя в ci всегда ставится новый ансибл - проблема в версиях
inqfen
тут я ступил
Vladimir
хотя там версия зафиксирована
А Вы не используете линтеры, в том же ci?
inqfen
да
inqfen
да в смысле используем)
inqfen
тоже версии фиксированы
Vladimir
да в смысле используем)
У нас он файлится, если встречает warning. Когда правим версию, обновляем там где линтер, убираем депрекейтед, тестируем и обновояем в остальных местах
inqfen
ну я и говорю выше, что ступил в ci это будет использоваться указанных версий
Dan
Philip ты бот?
Dan
👌
TT
Почему спросил?
Sergey
Коллеги, добрый день! Подскажите пожалуйста, как можно сделать следующую задачку. Есть yaml файлы, каждый файл нужно вгружать в словарь , и исходя из полученных данных этого словаря генерить файл из jinja2 шаблона
Sergey
Может быть есть у кого уже готовая конструкция
George
Коллеги, добрый день! Подскажите пожалуйста, как можно сделать следующую задачку. Есть yaml файлы, каждый файл нужно вгружать в словарь , и исходя из полученных данных этого словаря генерить файл из jinja2 шаблона
Я джинджей такое делаю, Ога. Но все сильно зависит от структуры данных. Высокоуровнево - там где ансибл не нужен - "j2 -f yaml template.j2 values.yaml > target_file". В ансибле используешь модуль template
Max
Коллеги, добрый день! Подскажите пожалуйста, как можно сделать следующую задачку. Есть yaml файлы, каждый файл нужно вгружать в словарь , и исходя из полученных данных этого словаря генерить файл из jinja2 шаблона
млишком общий вопрос. что из себя поедставляют эти файлы ? имеют ли единую структуру? легко ли их сгруппировать в списки? есть механизмы загрузки данных в плей из файлов. там можно loop-ами создавать списки данных.
Sergey
Есть файлы yml которые лежат в папке ../application_name_folder/application_name.yml
Sergey
вот нужно как то получить имена файлов для начала и сгенерить в template с этими же именами файлов
Sergey
file_glob не понимает
George
Что не понимает ?
Sergey
../../../../application/*/*.yml
Sergey
я вывожу {{ item }}
Sergey
но он в {{item }} выдаёт полнный путь
Sergey
а мне нужено только имя без пути и yml
George
Это проблема ?
George
Потом просто отрежь все, что не нужно
Sergey
угу
Sergey
а как ?Г
George
Ну, фильтром, очевидно
Sergey
Подскажи как в полученноим {{item}} фильтрануть
George
Подскажи как в полученноим {{item}} фильтрануть
https://stackoverflow.com/questions/45564899/extract-filename-from-file-result-in-ansible Примерно так. Честно - точного примера не помню
George
Может с функцией map еще придется поиграть. Вообще меня интересует другой вопрос - а почему ты свои простыни ямлов не хочешь в переменные плейбука или роли засунуть ?
George
Они тоже позволяют в иерархическую структуру
Sergey
сделаль)
Sergey
но file_glob непонимает * , если в папке лежит .yml
Sergey
тоесть имеестся структура папок с именами приложений в которых лежит файл yml с именем приложения
Sergey
- "../../../../variables/hive/applications/*/*.yml"
Sergey
вот типа вот так не хочет перебирать файлики
Sergey
может findом нужно делать лучше а не file_glob
George
может findом нужно делать лучше а не file_glob
Кмк, непринципиально. Важно другое - https://t.me/pro_ansible/98596
George
- "../../../../variables/hive/applications/*/*.yml"
А ты помнишь, что глоб умеет и так **/*.yml ?
Anton
П-переведи
Есть необходимость удовлетворить зависимость у одного хоста от другого. В сценарии несколько задач, пара из которых должна выполняться на другом. Из этой пары первая просто raw, второй include_role. Первая задача отрабатывает, вторая (с include_role)-нет.
Anton
Нельзя?
Timur
Не стоит. Если есть такая сложная кросс-хостовая логика, ее лучше на уровне плейбуки делать
Timur
Ну, и include_role в другой роли - тоже так себе затея
Max
Ну, и include_role в другой роли - тоже так себе затея
👆правильно Тимур говорит. это называется 'побочка'. роли работают по факту создавая побочный эффект. легко атомно тестировать воздействие 1 роли (см. molecule) Если ты смешиваешь 2 роли, то тестировать 'частично роль А', потом роль Б, и еще другая часть роли А - сложно, а иногда невозможно. когда у тебя сложно тестабильный код, тогда он легко ломаемый. и дебажить это - ненужный гемор. смотри на роли как на функции одного логического уровня, которые ты вызываешь в последовательности. тогда плейбуки упрощаются, тестабильность растет. ==> $€£¥₱ (имхо, ессно)
Anton
Т.е. в таком случае правильней вынести все что надо сделать на удаленной системе в другой сценарий и выполнять его по отдельному инвентарю? После этого вызывать сценарий по зависимыми хостам?
Vladislav 👻
Не обязательно
Vladislav 👻
Сценарий можно сделать один, а в нем красиво прописать, что вот эта роль для этих хостов, а вон та - для других
Max
Сценарий можно сделать один, а в нем красиво прописать, что вот эта роль для этих хостов, а вон та - для других
это рекомендуемый подход, по документам. 1 плейбук, несколько плеев, применяющие роли на разные группы хостов.
Max
1 плейбук делает 1 бизнес задачу.
Max
1 роль делает маленький, легко тестируемый функционал. параметры роли могут меняться, хост группы тоже.
Max
ессно, делегации тасков на сторонние цели (т.е. не хосты групп в которых бежит роль) нужно делать осторожно, и желательно вообще избегать.
Anton
ессно, делегации тасков на сторонние цели (т.е. не хосты групп в которых бежит роль) нужно делать осторожно, и желательно вообще избегать.
Избегать хотелось бы, но к сожалению похоже от этого никуда не деться. Поиск выдал вот такое: https://medium.com/opsops/ansible-2-4-2-7-include-role-and-delegate-to-3484583febc7
Anton
А вот как в одном плэйбуке выделить не на отдельную группу а на конкретный хост который имеется в параметрах у основного хоста по которому идёт плэйбук?
Anonymous
Коллеги, ткните в бест практис линк. Есть гитлаб, есть до 10 раннеров на линуксе. Есть до N целевых тачек, куда будет запущен деплой. Когда раннер был один и тачек было n=1-2, я сам ручками подключался к раннеру и от него делал ssh-copy-id. Когда число раннеров и тачек выросло и будет расти, тут хочется перестать использовать мой вариант, наверняка антипаттерн, а сделать хорошо. Как сделать хорошо? :)
George
а зачем тебе 10 раннеров.
George
мне лично хватало одного раннера, который спавнил докер контейнеры (docker executor). В принципе - аналогичная история с кубовским раннеров. Он может наплодить столько подов, сколько джобов единомоментно запущено
Anonymous
Ну одновременно может быть запущено до 10 пайплацнов разных проектов + разные сегменты сети, для разных стейджей.
George
т.е. физическая изоляция, да?
Anonymous
т.е. физическая изоляция, да?
Ага, поэтому разные раннеры на разные задачи.
Vladislav 👻
может быть и виртуальная, типа 5 раннеров с докером например, а 5 без
Vladislav 👻
просто масштабирование и гибкость
George
насчет ssh copy - тоже непонятно, зачем ты делал, т.к. можно ключ хранить в переменных гитлаба
George
мы оттуда высасывали ключи доступа к целевым серверам и мне кажется это правильнее, чем пытаться "настраивать" раннер
George
https://docs.gitlab.com/ee/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor
George
что-то такого типа, оно даже в документации описано
George
@ru_gitlab и причем тут ансибл
Anonymous
Ну так я ж ансибл запускаю для деплоя. Думал туда копать.
Anonymous
Ок, по ключам прочитаю.
Отделение Bereke Bank
а есть example inventory где в group_vars не файлы, а директории? Вчера в видео @tnt4brain было показано что так можно. На странице asnible best practice такое не нашел и в репе ansible-examples тоже
George
Единственный нюанс, что насколько я помню, у тебя подкаталог будет называться как группа