Vladimir
Вот я хочу это делать с виртуалками
Vladimir
Я хочу что бы были динамические изменения в конфигах при смене в архитектуре что ли
Vladimir
вот тупой пример, добавил я nginx еще 1 , и хочу что бы в php-fpm кофиге его ip подбавился как allow автоматом
Vladimir
Но для этого нужно это где то хранить, эту информацию что бы можно было ее тягать
Vladimir
Может я просто не понимаю зачем придумали сервис дискавери
Vladimir
А хранить мне все надо в редис в ключ значение тягать и подставлять шаблонизатором
Sergey
на тупой пример тупой ответ - ты делаешь нормальный шаблон конфига, который добавляет в allow все ip хостов, перечисленных в группе backends 😉
Sergey
а как засунуть в группу backends все твои backend-хосты - это твой вопрос. хочешь - руками, хочешь - через дин. инвентори.
Nikolay
Привет всем. Я хочу иметь в роли возможность выполнение дополнительных действию по ключу.
ну т.е. есть сейчас роль, которая описывает установку пакетов.
Но хочу чтобы было два "роадмапа" что-ли. Стандартный (только с установкой) и расширенный (с применением кастомных настроек)
Как эта фича называется (если она вообще есть)?
Sergey
Navern
Vladimir
Ну вот и я об этом же
Vladimir
Я просто хочу понять я правильно понимаю назначение консула\сервис дискавери
Nikolay
tags
Спасибо большое, Сергей 👍. Пойду читать доки :)
Sergey
Vladimir
А если when использовать ?
Vladimir
тут мне кажется стоит найти признаки смены твоего пути по твоей дорожной карте )
Vladimir
А причем тут докер ?)
Vladimir
Если использовать докер то нет смысла в ansible
Vladimir
Там кибернетис все проблемы решит
Sergey
А причем тут докер ?)
Я всё же предлагаю тебе посмотреть видео - там консул и его друзья тоже есть
Sergey
И, кхм-кхм, хотелки с добавлением сервисов по информации из консула
Vladimir
Понял, спасибо, но просто в докер не хочу лезть , там микросервисы а у нас монолит
Nklya
Ну из этого видео песочек уже сыпется
Vladimir
Vladimir
15 год кстати да
Sergey
Коллеги, нужен совет. Задачка такая: зная ip, получить имя интерфейса, на котором он находится. Знаю три способа: два некрасивых и один правильный, и вот как раз правильный(вытащить данные из hostvars) не получается - я не сильно программист, но на чистом питоне осилил бы эту структуру данных, а вот на jinja не получается. Может сталкивался кто с похожей задачей, направьте в нужную сторону.
Sergey
15 год кстати да
Раз ты в 17 задаёшь вопросы по консулу и ансиблу и сервис дискавери - значит, актуально, не?...
Sergey
Vladimir
Ну не факт что я просто не знаю правильный путь)
Vladimir
https://stackoverflow.com/questions/37718217/what-are-some-concrete-use-cases-for-consuls-key-value-store
Vladimir
Кстати вот вроде про это
Vladimir
We've been tinkering with Consul as a key-value store for a while but I think the most interesting use comes with Consul Template and using that to update configuration on the fly.
Vladimir
Пойду гляну видео )
Sergey
Sergey
есть такой
Sergey
и структура вида
"ansible_lo": {
"active": true,
"device": "lo",
....
},
"ipv4": {
"address": "127.0.0.1",
.... }
Sergey
далее - ты с помощью предыдущего списка, по его элементам создаёшь новый ключ: <% set dictname = "ansible_" ~ item %>
Sergey
а потом работаешь как с обычным словарём: hostvars[dictname]['ipv4']['address']
Sergey
jinja позволяет внутри угловых скобок создавать новые переменные, работать с условиями, циклами и т.д.
Sergey
спасибо!
Dmitry
- hosts: {{ item }}
remote_user: core
gather_facts: "False"
with_items: "{{ groups }}"
Dmitry
так можно?
Sergey
так можно?
если ты знаешь, зачем - то можно 😊 в общем-то, даже если не знаешь - тоже можно, кто тебе запретит-то?
а по сути - это такой типо динамический инвентори?
Dmitry
Dmitry
может это можно сделать както изящнее
Dmitry
я весь внимание
Sergey
я бы собрал все группы в одну над-группу и кинул таску ей
Sergey
😊
Sergey
а ансибл по общему правилу загрузит group_vars каждой группы
Dmitry
у меня есть инвентори вида
[group1]
host1
host2
[group1:vars]
myvar=val1
[group2]
host1
host2
[group2:vars]
myvar=val2
Dmitry
и вот таска которая должна выполниться для каждой группы но с соответсвующей варс
Dmitry
я могу канеш сделать
host: group1
...
host: group2
...
Sergey
[big-group:children]
group1
group2
Dmitry
но это как оп убански
Alf 🙀
hosts: all
Sergey
и назначь таски этой big-group
Alf 🙀
если конечно у тебя инвентори на этом заканчивается
Sergey
вот предметно - http://docs.ansible.com/ansible/latest/intro_inventory.html#groups-of-groups-and-group-variables
в целом - да.
только я бы ещё из inventory вынес переменные (свежие версии уже поругиваются на наличие там переменных)
Dmitry
Dmitry
просто плейбук
Nklya
Да, переменные в инвентори это шикарное решение
Vladimir
А почему бы тебе не указать when var def ?
Vladimir
И так разделить
Vladimir
И где надо добавляешь переменную
Pavel
К вопросу о консул-темплейте, проконсультируйте плиз:
Вот я хочу бекенды обновлять, ну классика: удалить из балансера бэкенд, релоунднуть, пойти на хост, сделать дела, вернуть хост, следующий и т.д.
Если конф балансера из консул темплейта делается, я запускаю сценарий, он мне удаляет ключ. Как из сценария понять, что конф балансера перегружен, чтобы начать работу с сервером?
Pavel
Ну, т.е. между записью ключа и релоадом конфа есть N секунд, которые надо бы подождать
Pavel
ну там есть всякие wait for
Alf 🙀
К вопросу о консул-темплейте, проконсультируйте плиз:
Вот я хочу бекенды обновлять, ну классика: удалить из балансера бэкенд, релоунднуть, пойти на хост, сделать дела, вернуть хост, следующий и т.д.
Если конф балансера из консул темплейта делается, я запускаю сценарий, он мне удаляет ключ. Как из сценария понять, что конф балансера перегружен, чтобы начать работу с сервером?
На балансере есть режим мэйнт, если мы говорим про хапрокси, если вам сервис передеплоить надо
Alf 🙀
Получить список бэкендов с лб и сравнить с желаемым?
Pavel
эммм, ну, я пока придумал только такое:
wait_for:
search_regex: "#{{ backend_ip }}"
Pavel
ну или хз
Alf 🙀
опять же если мы говорим про хапрокси то можно получить список серверов с бэкенда с их статусом через сокет, например
Pavel
ну я про nginx