Aleksey
Если не делать странное, то и чего-то куда-то вставлять туда, где оно не нужно, тоже не придётся.
"Есть многое на свете, друг Горацио, что не подвластно нашим мудрецам" это и ответ на ссылку на доки)))
Aleksey
Это на уровне групп все делается.
ну, а я о чем? зачем мне два инвентаря))) реально, перечитай весь тред!
Aleksey
Вы не понимаете, что вам пишут
а, ну да, ну да... пошел я)))
Sergey
"Есть многое на свете, друг Горацио, что не подвластно нашим мудрецам" это и ответ на ссылку на доки)))
Ты не хочешь чесать ЧСВ об участников этого чата. Вернее, тебя наверняка огорчит результат.
Aleksey
и 100% не использую два инвентаря. питон в руки!
Sergey
и 100% не использую два инвентаря. питон в руки!
Я пишу плагины на питоне для Ansible там, где это действительно требуется. Мои деплои на прод и стейдж отличаются только значением параметра -i. Впрочем, разломаете свой прод - пишите.
Timur
Ответьте на вопрос
Если схема для каждого нового хоста не меняется, то все просто. Заносите в основную группу. Все остальное делается через вложенные группы.
Aleksey
Я пишу плагины на питоне для Ansible там, где это действительно требуется. Мои деплои на прод и стейдж отличаются только значением параметра -i. Впрочем, разломаете свой прод - пишите.
ой. я деликатно замну тему. а то мы еще с вами где-то пересечемся и вам станет стыдно за это бряцанье. и не надо думать, что истина одна и всегда ваша) не обидел? надеюсь!
k
Если схема для каждого нового хоста не меняется, то все просто. Заносите в основную группу. Все остальное делается через вложенные группы.
Спасибо Ну, это в рамках "разные инвентори для разных окружений"? К сожалению, оно сюда не подходит Вот у меня несколько инвентори: пара динамических, один статический, ансибл ходит за ними в директорию, типа: -i inventories/ Динамические инвентори подвозят *срезы* по лейблам/тегам, проставленным на стороне провайдера То есть у меня инвентори это не дерево, а двумерная табличка: с одной стороны stage, с другой логическая группа Это удобно и вполне безопасно, если поставить защиту от человека на уровень, например, CI-системы: - в плейбуке прогоняем задачу по hosts: application - CI запускается всегда с --limit target_env В такой схеме всё хорошо, но статический инвентори писать очень стрёмно Надо отдельно добавить хост в правильное окружение и отдельно в правильную логическую группу Ход конём типа production > applciation > host1 тут не прокатывает т.к. группа application не дочерняя для production application/database/whatever это отдельный срез по функциональному признаку
k
Надо добавить, что окружений у меня не 2, а 100500: production, feature/*, нувыпоняли
Timur
Спасибо Ну, это в рамках "разные инвентори для разных окружений"? К сожалению, оно сюда не подходит Вот у меня несколько инвентори: пара динамических, один статический, ансибл ходит за ними в директорию, типа: -i inventories/ Динамические инвентори подвозят *срезы* по лейблам/тегам, проставленным на стороне провайдера То есть у меня инвентори это не дерево, а двумерная табличка: с одной стороны stage, с другой логическая группа Это удобно и вполне безопасно, если поставить защиту от человека на уровень, например, CI-системы: - в плейбуке прогоняем задачу по hosts: application - CI запускается всегда с --limit target_env В такой схеме всё хорошо, но статический инвентори писать очень стрёмно Надо отдельно добавить хост в правильное окружение и отдельно в правильную логическую группу Ход конём типа production > applciation > host1 тут не прокатывает т.к. группа application не дочерняя для production application/database/whatever это отдельный срез по функциональному признаку
У вас схема не самая удачная, судя по всему
Timur
Статику и динамику можно использовать вместе - никто не запрещает
k
У вас схема не самая удачная, судя по всему
Для написания статических инвентори просто ужасная, действительно :)
Timur
Для динамических проблемы разделения стейджа и прода вообще не должно быть
Timur
Там это делается на уровне выборки из источника просто
Timur
В динамическом инвентаре элементарно на каждый хост при создании вешается нужный набор тегов
Timur
А при деплое просто группы инвентаря формируются динамически на основе этих самых тегов
Timur
И никаких разных групп не нужно
Timur
В смысле, плейбуки для разных стейджей будут одними и теми же
Aleksey
А при деплое просто группы инвентаря формируются динамически на основе этих самых тегов
долгий путь к истине. реально. и не смешно. зачем было спорить. @agrrh замечу только, что разница между статически, созданным автоматически после изменения общей базы, и полностью динамическим, создаваемым на лету, лишь в задержке работы плейбука, хотя, как вы правильно заметили, можно на лету генерить не все, что только что нужно.
k
@tgadiev , Вы упорно тянете меня в стан иерархичного инвентори) Всё, что сейчас сказали про динамику - так и работает, с этим никто и не спорит Просто у меня проблема не в том, как дерево правильно составить, а в том, что я вообще не хочу им оперировать Подход со стороны тегов/лейблов для меня в работе оказался гораздо более удобен Неудобно только когда внезапно отняли всю динамику и надо написать что-то статичное Ну, тут кря, буду страдать :) Спасибо за время!
Timur
Я пытался решить заявленный вопрос по статическому инвентарю. То, что он на самом деле динамический, исходно нигде не звучало. А миелофон я в сервис отнес
k
Я пытался решить заявленный вопрос по статическому инвентарю. То, что он на самом деле динамический, исходно нигде не звучало. А миелофон я в сервис отнес
В задаче инвентори статический Вам стало интересно выйти за рамки задачи - ну я объяснил, откуда такие условия: рядом устоявшаяся группировка принципиально другая Про миелофон уже лишнее Хорошего дня :)
Aleksey
Да, динамический работает долго, но там два уровня кеширования - локальный кеш и общий в etcd/consul/zookeeper Частичное обновление пока не подвезли, но так было бы вообще шоколадно, вы абсолютно правы
вот поэтому я решаю задачу по пути автоматической генерации большого статического инвентори, что 100% динамика долго. это же понятно, что любой инвентори всегда можно выложить статикой. и наоборот) это как с энжайнсом. можно в любое место инвентори подсунуть как файл, так и скрипт или их набор. можно вообще без инвентаря - работает! но тогда эдхук команды не идут) не айс такой путь...
Full
>тогда эдхук команды не идут Инвентори можно заинлайнить.
Aleksey
>тогда эдхук команды не идут Инвентори можно заинлайнить.
эээ ... это было на тему, когда в инвентори только локалхост, а все остальное в базе) ну, чтобы "вместо стейджа прод не обновить")))
Full
А, сори, выпал из вашей Санта-Барбары. :)
Aleksey
А, сори, выпал из вашей Санта-Барбары. :)
да норм) минутка "ненависти")))
Full
У меня другой вопрос созрел. Два варианта: 1. - hosts: all roles: - role: db-server when: role_db_server is defined И на нужных хостах определить нужную переменную. 2. - hosts: db-servers roles: - role: db-server И хосты в соответствующих группах. И так и так сработает. Не могу определиться, как оставить. Инвентори - статика, если что.
Aleksey
У меня другой вопрос созрел. Два варианта: 1. - hosts: all roles: - role: db-server when: role_db_server is defined И на нужных хостах определить нужную переменную. 2. - hosts: db-servers roles: - role: db-server И хосты в соответствующих группах. И так и так сработает. Не могу определиться, как оставить. Инвентори - статика, если что.
можно роли в хостовой переменной описать. и просто вызывать для каждого хоста его роли из списка переменной. ну и как привильно выше заметил @agrrh используйте лимит для указания верной целевой группы
Full
Я тут из двух вариантов выбрать не могу, а ты мне третий принес. Спасибо, блин. :)
Aleksey
Я тут из двух вариантов выбрать не могу, а ты мне третий принес. Спасибо, блин. :)
тут на самом деле тема от @tgadiev "как не обновить по ошибке прод" и нужно куда-то заложить логику защиты от себя глупого
Aleksey
типа, чтобы не закатать неприменимую роль на неверный хост
Full
У меня такая проблема не стоит. У меня нет стейджа.
Full
Сейчас так и сделал.
Sergey
👍👍👍
Full
Мне тут линтер ругнулся: syntax error: found unknown escape character 'm' Вот в этой строке: preseed_password: "$V7#`xt'}rw/y\m" Его стоит воспринимать всерьез? Ну, всмысле, при запуске плебуки оно вероятно обломится в этом месте?
Sergey
может
Sergey
двойные кавычки анализируются на предмет escape
Sergey
одинарные - нет
Full
Ага, а там одинарная внутри. Ок, перегенерим.
Sergey
Ну вообще такие штуки обычно в ansible_vault складываются - и всё.
Egor
Ооо пока такая тема за inventory, а подскажите пожалуйста как быть если один хост должен быть в двух инвентори? (Ранее задавал вопрос, но малоли, еще интересные мысли услышу). К примеру есть лог хост на который происходит отправка логов. Есть два инвентори: production, staging. Лог сервер указан в production, но надо что бы staging виртуальные сервера отправляли логи в лог сервер. Как тут быть?
Egor
Читал по best pract, но там свой случай не нашел или не понял.
Андрей
добавить один хост в оба инвентори?
Egor
Опять таки это один из примеров и получается дублирование, а если еще одна машина, то получается и её дублировать. На сколько дублирование является нормой на практике? А если IP-address изменится к примеру, то получается надо приучать себя пользоватся поиском, вместо заранее знать структуру инвентори
Антон
Мне кажется, что ты слишком сильно заморачиваешься по поводу дублирования)
Egor
Согласен возможно сильно, но просто получается дублируются к примеру: Мониторинг машины для сбора метрик и сервера логирования, это из такого с чем столкнулся и не пойму как красиво решить.
Full
Ну вообще такие штуки обычно в ansible_vault складываются - и всё.
Да он одноразовый, на время инстала виртуалки, после того, как ансибл закрепится на машине, preseed выпиливается.
Egor
ip? а как он в инвентаре? он в ansible_host? или вот прямо так
Та вроде все по правилам: log: hosts: mlog01: ansible_port: 22 ansible_host: "192.168.1.121"
Egor
делаешь variables с адресом твоего лог сервера и используешь ее в своем filebeat-е или что там у тебя
Хорошо, мы получается опять дублируем но уже variables. Опять таки получается тоже самое.
Aleksey
Та вроде все по правилам: log: hosts: mlog01: ansible_port: 22 ansible_host: "192.168.1.121"
да, но потом возникает вопрос "если поменяется ip") ответ: для независимости от ip используют или резолверы или динамически генерируемый инвентарь. т.е если где-то есть дублирование, то должен быть единый источник изменений. это или a-рекорд, или скрипт, порождающий инвентарь из единой базы
Отделение Bereke Bank
ну ясен фиг что если ты хочешь получить одинаковый конфиг или кусок конфига в двух средах - у тебя где-то будет дублирование источника, из которого этот конфиг генерируется. Не важно - host_vars хоста из инвентори или просто ручками написанная переменная. можешь в роль захардкодить. тогда в одном месте только будет))
Aleksey
/etc/hosts - deploy on every hosts 😉 шучу
бывает пошутишь, и шутка становится явью)))
Full
Я так делаю. Без шуток. hosts генерится из инвентори.
Aleksey
Aleksey
и логика тут простая. инвентори и его источники как раз та база откуда заливаются все зоны dns, и тут же без разницы куда пихать, или dns или в статику по хостам. кста, в статику надежнее!
Aleksey
и куда? в консул?
Aleksey
мы тоже
Aleksey
в смысле, в консул
Aleksey
+
Muhammad
+
Aleksey
tnks. есть такая тема... иногда, лучше крутить педали не самодельного велосипеда, а готового.
Oleg
расскажите про кеширование фактов. как им пользоваться из плейбука, или опций ansible-playbook?
Andrew
Всем привет, подскажите пожалуйста как на убунту добавить universe репозиторий? - name: Add_unvierse apt_repository: repo: 'universe' Так он его не находит. Пытался нагуглить и нашел другой способ apt_repository: repo: "{{ item }}" loop: - "deb http://archive.ubuntu.com/ubuntu/ bionic universe" - "deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe" - "deb http://security.ubuntu.com/ubuntu/ bionic-security universe" Но после этого у меня сломался apt-update и в принципе работа с репозиторием убунты