Αλέχ
Только если названия хостов подпадают под паттерны. А если нет, то остаётся оперировать только на уровне названий групп, что очень удобно, когда в хостс файле более сотни хостов. Но если у вас весь хостс на 10 строк, то да
Отделение Bereke Bank
Потому что отбор хостов из всего инвентори делается через "hosts: group_foo", Карл, понимаешь? Через hosts!
Например есть роль запускающаяся на группе kubernetes (подгруппы masters и nodes). В роли есть такси которые нужны на мастерах но не на нодах. Тут удобнее через #странность
Sergey
hosts: allkubes1:!kubeslaves:&kubemasters
Αλέχ
Так в чем конкретно странность? В простом и понятном использовании переменной, доступной в ансибле? Или потому что в доке об этом ни слова?
Timur
Например есть роль запускающаяся на группе kubernetes (подгруппы masters и nodes). В роли есть такси которые нужны на мастерах но не на нодах. Тут удобнее через #странность
Подобную логику с исполнением кода на разных группах лучше выносить на уровень плейбуки, а не хардкодить в роли
Timur
Так в чем конкретно странность? В простом и понятном использовании переменной, доступной в ансибле? Или потому что в доке об этом ни слова?
В том, что вместо стандартного инструмента ансибла вы вставляете затычки из кривых костылей, которые не масштабируются и не переносятся на произвольный энв без перепиливания кода ролей
Артём
А можете на более техническом уровне, нежели «странно», распедалить? Что там есть настоящего? Например, в случае when: ansible.inventory_hostname in groups будет выполнено по лишней пачке команд на каждый хост в плейбуке. В отличие от «лишней группы», когда оно выполнится ровно столько раз, сколько нужно, и ни одного больше.
Timur
А можете на более техническом уровне, нежели «странно», распедалить? Что там есть настоящего? Например, в случае when: ansible.inventory_hostname in groups будет выполнено по лишней пачке команд на каждый хост в плейбуке. В отличие от «лишней группы», когда оно выполнится ровно столько раз, сколько нужно, и ни одного больше.
Если такое воткнуть на уровне плейбука, то это просто глупость и дублирование встроенного механизма плеев с хостпаттернами. Если на уровень роли - то получается хардкод, делающий невозможным исполнение роли на произвольном окружении с другим набором групп
Timur
В любом случае ничего хорошего
Артём
«Если на уровень роли - то получается хардкод, делающий невозможным исполнение роли на произвольном окружении с другим набором групп» Если у вопрошающего шансов на переиспользование - ноль целых, а оверхед на создание группы и последующую пляску с наследованием переменных от нуля отличен, имеет право на существование?
Sergey
Любой говнокод имеет право на существование.
Только бессмысленно по нему задавать вопросы :-)
Timur
Просто говнокодом от этого он быть не перестаёт, а поддержка такого кода не становится легче
Timur
И если есть возможность его избежать - лучше избегать
Timur
Кстати, оверхедов на создание групп нет никаких
Timur
Это просто теги
Bandikoot
Кстати, оверхедов на создание групп нет никаких
ну, всё-таки есть. увеличивается время чтения инвентори биоинтерфейсом
Артём
Я про ручное развешивание всего в инвентори.
Timur
Только бессмысленно по нему задавать вопросы :-)
Такие вопросы - это маркер недостаточной глубины понимания проблемы. Если есть понимание объективной необхоимости говнокода, подобных вопросов не возникает обычно. Если же возникает вопрос «как мне написать говнокод», то как правило это означает просто недостаточный уровень владения предметом, а задачу можно решить более правильным способом
Артём
Просто не первый раз картина, приходит человек, спрашивает, как правильно подпереть тут веточкой, ему сразу говорят, что он делает херню, и он грустный уходит. Он не получает понимания, почему то, что он делает, херня. Не получает понимания, как правильно и, главное, почему правильно именно так. Возникает ощущение, что попал в снобарий, хлебнул говна и ушёл вон.
Timur
Выше просто детально разжевали уже в ...надцатый раз
Timur
И почему так правильно - тоже объяснили
Артём
Там где-то далеко наверху - да. Но человек же приходит и задаёт вопрос, а не начинает читать всю историю. Может, копипасту заготовить, или теги расставить.
Bandikoot
На сколько микросекунд?
it depends. довелось видеть достаточно кудрявые инвентори и напряжённо разбираться, куда именно что катится плейбуком. слишком много групп — тоже такое себе
Bandikoot
но там и хостов было, конечно, овердофига, под 2к
Артём
Скоро допилю наш стайлгайд и ещё раз дам ссылку
Если можно припинить - будет вообще хорошо.
Bandikoot
Время тратится на проход по хостам и сбор фактов. Количество групп на хост роли почти не играет
с этим я и не спорил. я писал про то, что разбираться в написанных плейбуках потом может быть сложнее
greydjin
кто-то пользуется ансибл ролью публичной, для разворачивания постгре мастер-слейв?
greydjin
может в галакси что покажите или статью где описана роль. хочу роль с отзывом. пока нашел такое https://opensourceforu.com/2019/02/devops-series-configuring-a-postgresql-master-slave-setup-using-ansible/
Max
с этим я и не спорил. я писал про то, что разбираться в написанных плейбуках потом может быть сложнее
легче разбираться в плейбуках с указанными хостами через группы, и списками примененных ролей, чем ковырять десятки или сотни ролей и вылавливать из них группы... а насчет сложности инвентарей - в больших сайтах имеет смысл работать с динамикой. и статику тоже можно разбить на несколько инвентарей с ме́ньшим количеством групп.
Max
Скажи - с внешним классификатором
крутая идея - инвентарь созданный с помощью ml.
Max
🤣🤣🤣
Max
какой ужас. аж сердце закололо. счас инфаркт получу.
Timur
«Если на уровень роли - то получается хардкод, делающий невозможным исполнение роли на произвольном окружении с другим набором групп» Если у вопрошающего шансов на переиспользование - ноль целых, а оверхед на создание группы и последующую пляску с наследованием переменных от нуля отличен, имеет право на существование?
Да, ещё момент. Если код не предполагает переиспользование и запуск в различных окружениях, то зачем вообще делать роли в таком случае? Вся суть ролей как раз в возможности легкого переноса на другие окружения без модификации кода. Если такое не нужно - проще всю автоматизацию сразу делать только с помощью плейбук, и не лохматить бабушку
Alexander
Говорят лохматые бабушки просто в тренде ;)
Αλέχ
Да, ещё момент. Если код не предполагает переиспользование и запуск в различных окружениях, то зачем вообще делать роли в таком случае? Вся суть ролей как раз в возможности легкого переноса на другие окружения без модификации кода. Если такое не нужно - проще всю автоматизацию сразу делать только с помощью плейбук, и не лохматить бабушку
Вы слишком шаблонно мыслите. Далеко не все наборы провиженинга должны быть универсальны для всего и на любом окружении. Внезапно бывают еще и узконаправленные, в рамках некой архитектуры и которые не будут выноситься в опен сорс. И да, там тоже нужны роли. И да, в них можно (а иногда даже нужно) хардкодить привязку по наборам параметров
Alexander
Зато Ансибл на аве :)
Alexander
Тут разговор не про мнения, тут разговор про сущности заложенные создателями
Alexander
Сделать можно по-разному, как и относиться к этому
Αλέχ
Ну тогда какой смысл дискутировать на тему, что заложенная сущность - это единственно верное решение? Решение “как использовать” принимают люди, исходя из оценки задач и нужд
Αλέχ
С обществом можно поделиться методами и приемами, потому что они реально могут пригодится,… а не орать про #странность
George
Я хотя бы этим могу оправдать. Условно, есть какие-то роли, которые разрабатывает отдельный человек. Или команда. И есть человек, который их интегрирует. Или предлагаете плейбуками интегрироваться ?
Timur
Роли введены как сущность, облегчающая параметризацию и переносимость кода между различными окружениями
Max
Говорят лохматые бабушки просто в тренде ;)
на мотоциклах в косухах, отнимающие кошельки у молодых людей.
George
А если мы ходим его версионировать и, условно, инклюдит в централизованный репо с плейбуками ?
George
Это скорее идеи, а не предложение реализации )
Αλέχ
Написанное выше: > Внезапно бывают еще и узконаправленные, в рамках некой архитектуры Предполагается, что плейбуки/роли никогда не будут выноситься за рамки данной архитектуры
Timur
Шоб було?
George
кого его?
То что разраб наговнякал - плейбук или роль
Timur
То что разраб наговнякал - плейбук или роль
Версионируйте сколько влезет
Max
То что разраб наговнякал - плейбук или роль
аналогия - роль - "битлиотека", плейбук - "пользовательский код", и всякие варз - конфигурация.
Αλέχ
Зачем тогда нужны роли - можете объяснить?
А вы предлагаете все сразу в плейбук валить? Или как это должно выглядеть?
Max
самое главное в ролях под версиями - что можно обновлять роль, не сломав старый плейбук. имхо.
Max
А вы предлагаете все сразу в плейбук валить? Или как это должно выглядеть?
если перенос не нужен, то один толстый плейбук можно разбить на поменьше.
George
т.к. роли - версионируются. плейбуки - вроде как нет. Можно самому через гит их подтягивать или субмодули... но выглядит как костыль
George
если перенос не нужен, то один толстый плейбук можно разбить на поменьше.
ну, это, как минимум, нужно сделать для улучшения понимания структуры кода
Timur
А вы предлагаете все сразу в плейбук валить? Или как это должно выглядеть?
Если не предполагается запуск в различных окружениях - да. А что мешает?
Max
я кладу их параллельно с requirements.$pb.yml
Max
перед запуском дергаю ansible-galaxy и устанавливаю роли нужных версий.
Max
раввин Молекулевич не сопротивляется
Αλέχ
Роли нужны для специфичного софта/сервисов/бутстрапов, коих может быть несколько десятков. Описывать все в одном плейбуке с вариативностью по хостам и группам - это имхо, очень тупо. В таком случае плейбук содержит только хост/группу и набор ролей, а в ролях частично используется логика “применять некий таск или пропускать” в зависимости от хоста
Timur
Все инструменты структурирования кода доступны в плейбуках также, как и в ролях