Stefan
ну а в роли описываешь че юзать и когда ансибл сам сделает проверку на наличие в груп_варсах
Stefan
если нигде в роли твоей нет
Maxim
ну вот у меня есть груп_вар, в котором описаны все юзеры как мне дальше раскидать их по ролям так, чтобы на провиженинге получить полный список юзеров для этого хоста?
Nklya
если очень хочется, то ансибл умеет мержить хеши, это в ansible.cfg включается. Но обычно это стремная идея
Maxim
то есть у меня может быть базовая роль со своим списком, проектные роли, где свои списки, плюс один сервер может хостить несколько проектов, поэтому списки юзеров из ролей надо помержить в один при накатывании
Maxim
Фишка в том, что нужно по group_vars раскидать что и в каких группах должно быть
а если юзеры в группах пересекаются? копипастить и не забыть, где ещё надо поправить, когда что-то меняется? ключ, например, у кого-то из админов истёк, и какие дальнейшие действия? пройтись руками по всем группам и в каждой у админа ключ поменять?
Maxim
чот так себе автоматизация 😄
cent
ммм, то есть пер-сервер, а не пер-роль?
Пер-группа) Пер-хост - это host_vars
Maxim
Никто не запрещает group_vars/*.yml генерить тоже
а есть какая-то генерилка? или самому ямлопарсер написать?
cent
а есть какая-то генерилка? или самому ямлопарсер написать?
Плейбук просто пишешь на localhost и все. Или delegate_to: local
cent
а есть какая-то генерилка? или самому ямлопарсер написать?
Генерить имеет смысл, если описание этих пользователей не в yaml. На основании папок с ssh ключами, например. А если можно описать в yaml, то проще просто в конфиг все положить. Зачем генерить тогда?
Maxim
нене, всё в ямле описато там либо сам паблик-кей, либо ссылка на гитхаб
Maxim
в ролях что-то вроде вот такого: https://gist.github.com/59a544101f10766712bfe77a229b7447
Maxim
но я упёрся в то, как этот словарь заранее подготовить
cent
но я упёрся в то, как этот словарь заранее подготовить
А как его еще можно подготовить? Только описать
Maxim
это вообще вменяемая идея, или обычно всё по-другому делают?
Maxim
я чот не нашёл каких-то best practices по этому поводу
Maxim
такое чувство, что такого рода провиженинг ансиблем вообще не делают
Maxim
ну просто не нашёл никаких общеупотребляемых практик
Maxim
полез колхозить, а там всё как-то небанально
Maxim
если есть какие-то ссылки на сакцесс-стори, то был бы весьма признателен
bebebe
я мельком перечитал дискуссию, у вас проблема в мержинге словарей с разными структурами в ansible?
Maxim
Структура везде одинаковая
Maxim
Просто я хочу держать общий список юзеров в каком-то одном месте
Maxim
И описывать их всех только один раз
Maxim
Чтобы не копипастить тыщу раз ключи, например, которые меняются время от времени
Maxim
Не так давно имел приватную беседу с @freeseacher, который и сказал, что я хочу странного, и так никто не делает
Maxim
Ну и собственно не нагуглились какие-то общие практики по этому вопросу
bebebe
Чтобы не копипастить тыщу раз ключи, например, которые меняются время от времени
вы не думали использовать yaml anchors для этого? http://termbin.com/jbpx ?
bebebe
но это в рамках ондого yaml документа
Maxim
то есть задача в конкретизированном виде выглядит так: есть контора, которая делает всякий маркетинговый треш есть ряд админов, который довольно фиксирован есть команды разработчиков, которые меняются от проекта к проекту, а так же - пересекаются между проектами есть сервера, которые бывают выделенные для проекта, а бывают предназначены для N проектов одновременно цель задачи: завести всех админов и всех проектных юзеров на целевом сервере учитывая довольно лютую перемешанность разработчиков между проектами хочется держать список (детальный - с ключами, группами, etc) всех юзеров в каком-то строго одном месте, а в роли рассовывать только "указатели" на элементы этого списка для серверов, предназначенных для N проектов одновременно, эти списки из ролей должны как-то мержиться а админы в полном составе должны присутствовать на всех серверах
bebebe
Такое вам не подходит?
bebebe
вы не думали использовать yaml anchors для этого? http://termbin.com/jbpx ?
Aleksey
И как я говорил управление пользователями плохой кейс для анстибла. Ибо порядок запуска плейбуков приведет к разным результатирующим правам пользователя. Исключением является вариант когда ансибл смотрит всегда на внешнюю бд и лишь проставляет соответствие ей
Maxim
вы не думали использовать yaml anchors для этого? http://termbin.com/jbpx ?
тут есть пара нюансов: 1. насколько я понимаю, это можно только в рамках одного файла делать (то есть будут перемешаны "справочники" юзеров с данными о проектах) 2. не совсем понятно, как это потом в роли заносить
Vadim
нормальный это кейс для энсибла, но хотелки вроде "тут ключ в перменной а тут из файла" дорого стоят
bebebe
тут есть пара нюансов: 1. насколько я понимаю, это можно только в рамках одного файла делать (то есть будут перемешаны "справочники" юзеров с данными о проектах) 2. не совсем понятно, как это потом в роли заносить
я пока не вижу противоречий. подкладывается этот yaml (одним документом) с описанием всех пользователей и группы в которые они входят допустим в inventory/users.yaml далее в плейбуках просто использовать: user: with_items: project_name1
Maxim
а админов копипастить в каждое проектное множество?
Maxim
или можно как-то сложить?
bebebe
можно и сложить, я могу это сделать за вас
Maxim
там что-то вроде with_items: admins + project_name
Vadim
вытягивать админов для проекта через json_query, например
Maxim
или по-другому как-то?
Maxim
вытягивать админов для проекта через json_query, например
админы не per-project, они "глобальные"
Vadim
для более сложных случаев у нас свой монструозный питоновский модуль который устанавливает факты, дергая где надо API, например
bebebe
не обязательно, можно сделать следующим образом users: .... global_admins: &global_admins - <<: *admin1 - <<: *admin2 project_admins: <<: *global_admins - *project_admin - *project_admin2
Maxim
о, можно свести копипасту к одной строчке
Maxim
круто
Aleksey
Всякие паппеты рассчитывают список юзеров и имеют одну точку зрения на результат. Ансибл в силу работы имеет каждый раз разную. При типичном конечно кейсе
Maxim
ну то что эти юзеры будут в разном порядке приезжать - это же вроде не так страшно
Maxim
или я что-то упускаю?
Maxim
в каком плане?
Maxim
то что элементы в массиве будут отсортированы по-разному вроде бы в любом случае не страшно же
Maxim
главное, чтобы внутри элементов поля в тыкву не превратились
Maxim
или я по-прежнему чего-то не понимаю?
bebebe
главное, чтобы внутри элементов поля в тыкву не превратились
а под тыквой что подразумеваете? все так пришлось за вас рабочий вариант накидать, держите http://termbin.com/jnfs
Aleksey
Тыква это а не вариант. Комбинаторный взрыв проектов пользователей и их прав.
bebebe
а под тыквой что подразумеваете? все так пришлось за вас рабочий вариант накидать, держите http://termbin.com/jnfs
используйте https://github.com/kislyuk/yq что-бы валидировать что получилось, найдете более удобный для вас формат ну и читайте спецификацию http://yaml.org/spec/1.2/spec.html
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
в ваших тестовых окружениях нет доступа до интернетов?
Constantin
в ваших тестовых окружениях нет доступа до интернетов?
Из интернета нет доступа до моих образов =)
bebebe
а как образы качать без инета)00
локальный артифактори видимо. хотя нужно как-то прокидывать внутрь http порт, или менеджить тестовую зону в dns вообщем, не до конца понятно что будет тестироваться, работоспособность самого letsencrypt или то что letsencrypt клиент вызывается с нужными параметрами. впрочем, это уже оффтопик. в k8s есть letsencrypt Issuer для докера есть letsnecrypt-companion https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
bebebe
работает прямо из коробки, вам про него расскажут в @devops_ru