Timur
Timur
Sergey
Aleksey
Aleksey
и 100% не использую два инвентаря. питон в руки!
k
Sergey
и 100% не использую два инвентаря. питон в руки!
Я пишу плагины на питоне для Ansible там, где это действительно требуется. Мои деплои на прод и стейдж отличаются только значением параметра -i. Впрочем, разломаете свой прод - пишите.
Timur
Ответьте на вопрос
Если схема для каждого нового хоста не меняется, то все просто. Заносите в основную группу. Все остальное делается через вложенные группы.
Aleksey
Sergey
k
Если схема для каждого нового хоста не меняется, то все просто. Заносите в основную группу. Все остальное делается через вложенные группы.
Спасибо
Ну, это в рамках "разные инвентори для разных окружений"? К сожалению, оно сюда не подходит
Вот у меня несколько инвентори: пара динамических, один статический, ансибл ходит за ними в директорию, типа: -i inventories/
Динамические инвентори подвозят *срезы* по лейблам/тегам, проставленным на стороне провайдера
То есть у меня инвентори это не дерево, а двумерная табличка: с одной стороны stage, с другой логическая группа
Это удобно и вполне безопасно, если поставить защиту от человека на уровень, например, CI-системы:
- в плейбуке прогоняем задачу по hosts: application
- CI запускается всегда с --limit target_env
В такой схеме всё хорошо, но статический инвентори писать очень стрёмно
Надо отдельно добавить хост в правильное окружение и отдельно в правильную логическую группу
Ход конём типа production > applciation > host1 тут не прокатывает т.к. группа application не дочерняя для production
application/database/whatever это отдельный срез по функциональному признаку
k
Надо добавить, что окружений у меня не 2, а 100500: production, feature/*, нувыпоняли
Aleksey
Timur
Спасибо
Ну, это в рамках "разные инвентори для разных окружений"? К сожалению, оно сюда не подходит
Вот у меня несколько инвентори: пара динамических, один статический, ансибл ходит за ними в директорию, типа: -i inventories/
Динамические инвентори подвозят *срезы* по лейблам/тегам, проставленным на стороне провайдера
То есть у меня инвентори это не дерево, а двумерная табличка: с одной стороны stage, с другой логическая группа
Это удобно и вполне безопасно, если поставить защиту от человека на уровень, например, CI-системы:
- в плейбуке прогоняем задачу по hosts: application
- CI запускается всегда с --limit target_env
В такой схеме всё хорошо, но статический инвентори писать очень стрёмно
Надо отдельно добавить хост в правильное окружение и отдельно в правильную логическую группу
Ход конём типа production > applciation > host1 тут не прокатывает т.к. группа application не дочерняя для production
application/database/whatever это отдельный срез по функциональному признаку
У вас схема не самая удачная, судя по всему
Timur
Статику и динамику можно использовать вместе - никто не запрещает
Timur
Для динамических проблемы разделения стейджа и прода вообще не должно быть
Timur
Там это делается на уровне выборки из источника просто
Timur
В динамическом инвентаре элементарно на каждый хост при создании вешается нужный набор тегов
k
Timur
А при деплое просто группы инвентаря формируются динамически на основе этих самых тегов
Timur
И никаких разных групп не нужно
Timur
В смысле, плейбуки для разных стейджей будут одними и теми же
k
@tgadiev , Вы упорно тянете меня в стан иерархичного инвентори)
Всё, что сейчас сказали про динамику - так и работает, с этим никто и не спорит
Просто у меня проблема не в том, как дерево правильно составить, а в том, что я вообще не хочу им оперировать
Подход со стороны тегов/лейблов для меня в работе оказался гораздо более удобен
Неудобно только когда внезапно отняли всю динамику и надо написать что-то статичное
Ну, тут кря, буду страдать :) Спасибо за время!
Timur
k
долгий путь к истине. реально. и не смешно. зачем было спорить. @agrrh замечу только, что разница между статически, созданным автоматически после изменения общей базы, и полностью динамическим, создаваемым на лету, лишь в задержке работы плейбука, хотя, как вы правильно заметили, можно на лету генерить не все, что только что нужно.
Да, динамический работает долго, но там два уровня кеширования - локальный кеш и общий в etcd/consul/zookeeper
Частичное обновление пока не подвезли, но так было бы вообще шоколадно, вы абсолютно правы
Timur
Я пытался решить заявленный вопрос по статическому инвентарю. То, что он на самом деле динамический, исходно нигде не звучало. А миелофон я в сервис отнес
Full
>тогда эдхук команды не идут
Инвентори можно заинлайнить.
Full
А, сори, выпал из вашей Санта-Барбары. :)
Full
У меня другой вопрос созрел.
Два варианта:
1.
- hosts: all
roles:
- role: db-server
when: role_db_server is defined
И на нужных хостах определить нужную переменную.
2.
- hosts: db-servers
roles:
- role: db-server
И хосты в соответствующих группах.
И так и так сработает. Не могу определиться, как оставить.
Инвентори - статика, если что.
k
Aleksey
Full
Я тут из двух вариантов выбрать не могу, а ты мне третий принес. Спасибо, блин. :)
Aleksey
типа, чтобы не закатать неприменимую роль на неверный хост
Full
У меня такая проблема не стоит. У меня нет стейджа.
Sergey
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
Согласен возможно сильно, но просто получается дублируются к примеру: Мониторинг машины для сбора метрик и сервера логирования, это из такого с чем столкнулся и не пойму как красиво решить.
Aleksey
Отделение Bereke Bank
Egor
Отделение Bereke Bank
ну ясен фиг что если ты хочешь получить одинаковый конфиг или кусок конфига в двух средах - у тебя где-то будет дублирование источника, из которого этот конфиг генерируется. Не важно - host_vars хоста из инвентори или просто ручками написанная переменная.
можешь в роль захардкодить. тогда в одном месте только будет))
Egor
NM
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 и в принципе работа с репозиторием убунты