Stefan
ну а в роли описываешь че юзать и когда
ансибл сам сделает проверку на наличие в груп_варсах
Stefan
если нигде в роли твоей нет
Maxim
ну вот у меня есть груп_вар, в котором описаны все юзеры
как мне дальше раскидать их по ролям так, чтобы на провиженинге получить полный список юзеров для этого хоста?
Nklya
если очень хочется, то ансибл умеет мержить хеши, это в ansible.cfg включается.
Но обычно это стремная идея
cent
Maxim
то есть у меня может быть базовая роль со своим списком, проектные роли, где свои списки, плюс один сервер может хостить несколько проектов, поэтому списки юзеров из ролей надо помержить в один при накатывании
Maxim
чот так себе автоматизация 😄
cent
Maxim
cent
cent
Maxim
нене, всё в ямле описато
там либо сам паблик-кей, либо ссылка на гитхаб
cent
Maxim
в ролях что-то вроде вот такого: https://gist.github.com/59a544101f10766712bfe77a229b7447
Maxim
но я упёрся в то, как этот словарь заранее подготовить
cent
Maxim
это вообще вменяемая идея, или обычно всё по-другому делают?
Maxim
я чот не нашёл каких-то best practices по этому поводу
Maxim
такое чувство, что такого рода провиженинг ансиблем вообще не делают
bebebe
Maxim
ну просто не нашёл никаких общеупотребляемых практик
Maxim
полез колхозить, а там всё как-то небанально
Maxim
если есть какие-то ссылки на сакцесс-стори, то был бы весьма признателен
bebebe
я мельком перечитал дискуссию, у вас проблема в мержинге словарей с разными структурами в ansible?
Maxim
Структура везде одинаковая
Maxim
Просто я хочу держать общий список юзеров в каком-то одном месте
Maxim
И описывать их всех только один раз
Maxim
Чтобы не копипастить тыщу раз ключи, например, которые меняются время от времени
Maxim
Не так давно имел приватную беседу с @freeseacher, который и сказал, что я хочу странного, и так никто не делает
Maxim
Ну и собственно не нагуглились какие-то общие практики по этому вопросу
bebebe
bebebe
но это в рамках ондого yaml документа
Maxim
то есть задача в конкретизированном виде выглядит так:
есть контора, которая делает всякий маркетинговый треш
есть ряд админов, который довольно фиксирован
есть команды разработчиков, которые меняются от проекта к проекту, а так же - пересекаются между проектами
есть сервера, которые бывают выделенные для проекта, а бывают предназначены для N проектов одновременно
цель задачи: завести всех админов и всех проектных юзеров на целевом сервере
учитывая довольно лютую перемешанность разработчиков между проектами хочется держать список (детальный - с ключами, группами, etc) всех юзеров в каком-то строго одном месте, а в роли рассовывать только "указатели" на элементы этого списка
для серверов, предназначенных для N проектов одновременно, эти списки из ролей должны как-то мержиться
а админы в полном составе должны присутствовать на всех серверах
Aleksey
bebebe
Такое вам не подходит?
bebebe
вы не думали использовать yaml anchors для этого?
http://termbin.com/jbpx ?
Aleksey
И как я говорил управление пользователями плохой кейс для анстибла. Ибо порядок запуска плейбуков приведет к разным результатирующим правам пользователя. Исключением является вариант когда ансибл смотрит всегда на внешнюю бд и лишь проставляет соответствие ей
bebebe
Vadim
нормальный это кейс для энсибла, но хотелки вроде "тут ключ в перменной а тут из файла" дорого стоят
Maxim
Maxim
а админов копипастить в каждое проектное множество?
Maxim
или можно как-то сложить?
bebebe
можно и сложить, я могу это сделать за вас
Maxim
там что-то вроде with_items: admins + project_name
Vadim
вытягивать админов для проекта через json_query, например
Maxim
или по-другому как-то?
Maxim
Vadim
для более сложных случаев у нас свой монструозный питоновский модуль который устанавливает факты, дергая где надо API, например
bebebe
не обязательно, можно сделать следующим образом
users:
....
global_admins: &global_admins
- <<: *admin1
- <<: *admin2
project_admins:
<<: *global_admins
- *project_admin
- *project_admin2
Maxim
о, можно свести копипасту к одной строчке
Maxim
круто
Aleksey
Всякие паппеты рассчитывают список юзеров и имеют одну точку зрения на результат. Ансибл в силу работы имеет каждый раз разную. При типичном конечно кейсе
Maxim
ну то что эти юзеры будут в разном порядке приезжать - это же вроде не так страшно
Maxim
или я что-то упускаю?
Alexander
bebebe
Maxim
в каком плане?
Maxim
то что элементы в массиве будут отсортированы по-разному вроде бы в любом случае не страшно же
Maxim
главное, чтобы внутри элементов поля в тыкву не превратились
Maxim
или я по-прежнему чего-то не понимаю?
Aleksey
Тыква это а не вариант. Комбинаторный взрыв проектов пользователей и их прав.
Constantin
Ребят, а как вы плэйбуки с letsencrypt тестируете?
Есть --stage флаг у certbotа, но он все равно пытается провести dns проверку, а я просто на локальном окружении хочу потестить, что все хорошо работает, пусть и с фэйковыми сертификатами
bebebe
—stage - это обращение к staging api со стороны letsencrypt, проверка происходит таже самая, только
1. отдается не "зеленый сертификат"
2. отсутствуют лимиты на количество запросов и сертиифатов, как раз для того что-бы не попасть под баны на prod letsencrypt'e во время множества тестирований
Constantin
—stage - это обращение к staging api со стороны letsencrypt, проверка происходит таже самая, только
1. отдается не "зеленый сертификат"
2. отсутствуют лимиты на количество запросов и сертиифатов, как раз для того что-бы не попасть под баны на prod letsencrypt'e во время множества тестирований
Ну это я знаю, мне инетересно, можно ли как-то потестировать без DNS проверки, то есть чтобы с локальной виртуалки в вагранте или из докер контейнера
Пока пришла в голову мысль поискать контейнер, или север, который на любой запрос от certbot на него будет отвечать, что все ок. Чтобы генерились левые сертификаты без проверки по DNS, этого бы вполне хватило
bebebe
в ваших тестовых окружениях нет доступа до интернетов?
Sergey
Constantin
bebebe
а как образы качать без инета)00
локальный артифактори видимо.
хотя нужно как-то прокидывать внутрь http порт, или менеджить тестовую зону в dns
вообщем, не до конца понятно что будет тестироваться, работоспособность самого letsencrypt или то что letsencrypt клиент вызывается с нужными параметрами.
впрочем, это уже оффтопик. в k8s есть letsencrypt Issuer
для докера есть letsnecrypt-companion
https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
Constantin
Constantin
локальный артифактори видимо.
хотя нужно как-то прокидывать внутрь http порт, или менеджить тестовую зону в dns
вообщем, не до конца понятно что будет тестироваться, работоспособность самого letsencrypt или то что letsencrypt клиент вызывается с нужными параметрами.
впрочем, это уже оффтопик. в k8s есть letsencrypt Issuer
для докера есть letsnecrypt-companion
https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
Тестироваться будет, что все, что завязано на то, что сертификат будет получен отрабатывает корректно, например, что Nginx получит сертификаты, что они будут созданы, если их нет, что задача на обновление поставится и т. п. рутина
bebebe
bebebe
работает прямо из коробки, вам про него расскажут в @devops_ru