Vladimir
Каждая команда отвечает за свой сервис?
Ну, т.е., ты предлагаешь для каждой команды свой плейбук пилить
Vladimir
Ясн
Gleb
плейбук почему нет? он же всего лишь набор ролей
Sergey
Ну, т.е., ты предлагаешь для каждой команды свой плейбук пилить
Я такое не говорил, я всё ещё в режиме "непонятно, что сделать-то нужно".
Vladimir
Каждая команда отвечает за свой сервис?
Про сервис - не важно. Скрипт то формируется одинаковый, просто с разным набором переменных
Sergey
Про сервис - не важно. Скрипт то формируется одинаковый, просто с разным набором переменных
Важно. Если у тебя скрипт запускается, то ты делаешь странное - слепляешь данные и код. Этакий бейсик с операторами DATA и READ. Вспомни, что существуют не только башнянки. но и файлы с переменными, которые, в свою очередь, ты можешь темплейтить как угодно.
Sergey
Ну и сам концепт - отстой, потому что нет идемпотентности как класса.
Sergey
Ты хочешь кодить - кодь, вот причём тут Ансибл?
Vladimir
Ну, да. Я понял, что логику надо передумать
Maxim
не делать такую дичь как выше написано, ансибл это не система для управления юзерами
ну подставь группы пакетов сюда вместо юзеров есть пакеты, которые надо на все хосты ставить, а есть хостгруп-специфик без разницы же
Vladimir
В конце концов, переменную со списком пакетов можно переопределить
Maxim
переопределить не подходит - хост-специфик останутся, а общие затрутся
Vladimir
Дак это
Vladimir
подготовь 2 плейбука
Lamobot
ну подставь группы пакетов сюда вместо юзеров есть пакеты, которые надо на все хосты ставить, а есть хостгруп-специфик без разницы же
По философии ансибла, вы назначаете группам хостов какие-то роли, которые устанавливают их в определенное состояние. Что мешает в этих ролях прописать пакеты которые нужно установить? Зачем нужно городить эти списки в переменных групп/хостов? Для роли db ставьте один, для бека другие.
Vladimir
Один на провиженинг голого сервера
Vladimir
Второй на настройку специфика
Gleb
ну подставь группы пакетов сюда вместо юзеров есть пакеты, которые надо на все хосты ставить, а есть хостгруп-специфик без разницы же
есть роль которая ставит пакет, роль подключается к группе хостов через плейбук - хотя с all в любом случае плохая идея
Maxim
почему плохая?
Maxim
я без подвоха, если что
Maxim
уже неоднократно слышу ответы вида "ансибл не для ххх", и уже не очень понимаю, для чего же он
Gleb
почему плохая?
на сотнях хостов все очень медленно будет ну и в целом собирать хосты в кучу я бы не стал, группами всегда проще оперировать
Vladimir
Да не плохая, просто, почему бы не разделить настройку сервера на два этапа? Первоначальная настройка (один плейбук), и настройка под конкретную задачу (второй плейбук)
Vladimir
У тебя же гибкость тогда образуется
Vladimir
Ладно. Я нуб, советовать не буду
Maxim
Такие вещи делай на списках, которые банально складываются оператором "+".
для этого надо заранее знать имена этих списков я не нашёл в мануале чего-то вроде: packages = [base_packages] for i in $groups packages += $i_packages
Vladimir
Ладно. Я нуб, советовать не буду
Или роли написать - base - app - db И в плейбуке прикручивать роль base для всех, а app и db через when
Tadeusz
так в salt шел бы лучше :)
Sergey
Или роли написать - base - app - db И в плейбуке прикручивать роль base для всех, а app и db через when
"when" закопай сразу, связь между хостами и ролями/тасками делается через параметр 'hosts' в play.
Maxim
так в salt шел бы лучше :)
да лучше бы сразу в миллионеры, но пока не пускают, приходится клиентские задачи решать :(
Sergey
я из мира шефа пришёл, там так принято :)
Там могут делать всё, что угодно. Но теперь я хотя бы знаю источник криков "ансибл императивен!" - люди делают странное, а потом честно страдают.
Gleb
да лучше бы сразу в миллионеры, но пока не пускают, приходится клиентские задачи решать :(
тут как бы никто не троллит особо, а по делу советы - что бы потом клиентские задачи, не стали твоей болью, пара десятков тычяч строк с кучей антипаттернов потом такую головную боль могут вызвать что проще будет закопать все и с нуля начать
Sergey
да лучше бы сразу в миллионеры, но пока не пускают, приходится клиентские задачи решать :(
Ну можно же их решать через решения, а можно - через другое место.В общем-то, этот чат - про первое.
Maxim
ок, давайте я попробую по-другому спросить в шефе можно завести списки с одинаковым именем для хоста, роли (группы хостов) и кукбука (нечто среднее между ролью и плейбуком в ансибле) при запуске шеф-клиента на конкретном хосте все эти списки помержатся в один и в кукбуке ты оперируешь уже "полным" списком для этого хоста то есть условно в роли all я делаю массив packages = [tmux], в роли db - packages = [mysql, libmysqlclient], в описании хоста db01 - входящего в роль db - packages = [emacs] и на фазе запуска шеф-клиента на db01 мне доступна переменная packages, содержащая [emacs, libmysqlclient, mysql, tmux] и я могу сделать в кукбуке что-то вроде: package packages do action :install end таким образом я имею один кукбук для установки всех нужных пакетов, не размазывая это на много ролей/плейбуков как это принято решать в ансибле?
Sergey
ок, давайте я попробую по-другому спросить в шефе можно завести списки с одинаковым именем для хоста, роли (группы хостов) и кукбука (нечто среднее между ролью и плейбуком в ансибле) при запуске шеф-клиента на конкретном хосте все эти списки помержатся в один и в кукбуке ты оперируешь уже "полным" списком для этого хоста то есть условно в роли all я делаю массив packages = [tmux], в роли db - packages = [mysql, libmysqlclient], в описании хоста db01 - входящего в роль db - packages = [emacs] и на фазе запуска шеф-клиента на db01 мне доступна переменная packages, содержащая [emacs, libmysqlclient, mysql, tmux] и я могу сделать в кукбуке что-то вроде: package packages do action :install end таким образом я имею один кукбук для установки всех нужных пакетов, не размазывая это на много ролей/плейбуков как это принято решать в ансибле?
У каждой роли - свой список пакетов. Нужные роли назначаются на группу хостов в конкретном play.
Maxim
ну то есть у меня будет набор ролей, в каждой из них будет что-то вроде tasks/install_packages.yml, в котором будет набор инструкций вида - package: "name=NAME"
Maxim
и никак в каком-то одном месте этими списками рулить "не положено"
Maxim
define компонент :)
Sergey
define компонент :)
Если ты покащенитствовать хочешь - сразу предупреждаю, лучше не надо. У тебя архитектор есть? Вот у него спроси, из каких компонентов состоит технологическая архитектура проекта.
Sergey
Верхнеуровневый блок, в общем.
Maxim
я же сразу написал
Maxim
я без подвоха, если что
Sergey
Вот для трёхзвенки типовой компоненты: веб-сервер, БД, сервер приложений.
Maxim
ну то есть я просто не понимаю, можно ли обойтись без многочисленной копипасты, и что делать с зависящими от "внешних условий" компонентами (типа sshd_config)
Sergey
ну то есть я просто не понимаю, можно ли обойтись без многочисленной копипасты, и что делать с зависящими от "внешних условий" компонентами (типа sshd_config)
Да нет копипасты, есть разделение ответственности. Ты пытаешься супер-пупер-роль наваять, которая одна за всё отвечать будет. В Ансибле это - типичный антипаттерн.
Maxim
вместо sshd_config можно подставить правила файрвола, например, ну в общем много можно придумать вариантов, когда надо управлять чем-то, что состоит/зависит от окружающих сущностей
Maxim
См. выше - параметризованные роли.
ты имеешь в виду что-то вроде: dependencies: - role: some_role vars: some_role_var: some
Maxim
?
Sergey
ты имеешь в виду что-то вроде: dependencies: - role: some_role vars: some_role_var: some
Слушай, ну откуда ты всё это придумываешь? Ну забудь уже шеф, ну пожалуйста..... Без всяких зависимостей, декларативно: - hosts: <group1> roles: - base - postgres - redis
Maxim
так а в чём параметризация?
Maxim
ну то есть "параметризованные роли" - это что?
Maxim
или как это "в оригинале" называется, чтобы по-русски не гуглить? ;)
Sergey
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#using-roles
Maxim
спасибо, пойду читать
977
Коллеги как это упростить?
Michael
😐 записать в одну строку?
977
Нужно уменьшить кол во строк
977
Но чтобы работало
977
Csw это нужно?
Logan
а я ведь шутил про фото с экрана...
Logan
мои глаза
977
[Cisco:vars] для чего нужно?
Sergey
Нужно уменьшить кол во строк
Про фотки было говорено не один раз, и тебе лично - тоже.