bebebe
Господа, можно ли юзать ansible ssh key file в vault?
да, можно, сделать inventory в формале yaml и добавить туда ключи как single encrypted vars https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html#single-encrypted-variable
bebebe
Не, это-то я знаю, хотел именно в файле хранить
вы опишите задачу, что бы "подробности" по пути новые не возникали
inqfen
Есть n файлов с ключами ssh. Хотел их через vault зашифровать и положить в репозиторий и использовать в зашифрованном виде. Но столкнулся с тем, что если в переменной ansible_ssh_key_file указан файл в vault, то он не расшифровывается, падает с ошибкой неверного формата файла. Пока вижу 2 пути: положить ключи в переменные (неудобно тем, что переменная большая будет) и делать decrypt перед запуском плейбука -добавляется дополнительное действие
Vlad
может быть загружать ключи в ssh-agent перед запуском плейбука?
inqfen
Так это ещё больше действий тогда
inqfen
Изначально на раннере их нет
inqfen
И не должно быть
Vlad
если использовать ssh-agent то в файлы они не будут сохраняться
inqfen
А потом при смене ключей образ пересобирать? Как-то так себе, проще ansible-vault decrypt делать
inqfen
Не умеет ansible работать с файлами ключей в vault ну и не страшно значит. Придётся на 1 действие больше делать
inqfen
Через extra vars подкидывается либо в group vars
inqfen
Ну то есть вообще в group vars, а если надо переписывается через extra
cent
Через extra vars подкидывается либо в group vars
Погоди, я чет не догоняю... andible_ssh_key_file - это же путь к файлу) А Ты пытаешься туда криптованную строку подложить?
inqfen
Ага, и он в разных группах разный и в некоторых случаях и от стандартного может отличаться
inqfen
Например на свежей машине в aws где моего ключа для деплоя ещё нет
inqfen
Вот я и хочу эту переменную юзать как юзал, но чтобы файлы ключей были в vault
inqfen
Ну судя по всему придётся перед запуском плейбука decrypt делать
inqfen
Скорее decrypt, encrypted строка ухудшит чтение файла, так что буду decrypt делать
inqfen
Думал, вдруг у него все модули работают таким образом, что если в начале файла ! Vault, то пытается расшифровать
inqfen
Но не прокатило
bebebe
сделайте отдельный файл host_vars/host1/ssh_key.yaml а все что вы хотите красиво видеть поместите в host_vars/host1/all.yaml
cent
Что-то сразу вспомнил про мышей и кактус)
inqfen
Вот переменные сейчас уже в all)
inqfen
Их там общих ещё штук 10
inqfen
Так что ладно, буду decrypt делать
cent
Вот переменные сейчас уже в all)
Эта вся затея изначально попахивает маразмом только потому, что у каждого инстанса ансибля или просто ssh клиента должен быть СВОЙ ssh ключ. Hashicorp vault даже прямо намекает, что даже записывать постоянные ключи - это не есть гут, а лучше выдавать временные токены.
inqfen
Инстанса ансибла - в смысле целевого хоста или с которого запускается?
cent
Т.о. нельзя таскать это в гите. Нужно генерить каждый раз и добавлять. Удалять и передергивать плейбук, проводя ротацию ключей
inqfen
В идеале да, базара нет, но на данный момент пытаюсь сделать удобно из того, что есть и займёт немного времени. У каждого клиента своего ключа как раз таки нет, собственно сам клиент это гитлаб раннер в контейнере, куда просто из гита код дёргается. Так что пока живу так, потом в каком-нибудь будущем, где срочных задач у меня будет меньше это будет меняться
inqfen
Нет
inqfen
Запускается контейнер, в него делается git clone репы
inqfen
А вот там уже ключ
cent
дичь какая-то)
inqfen
Это gitlab ci называется
inqfen
Он в принципе так работает
bebebe
дичь какая-то)
почему дичь?
cent
клон чего? Код разрабов? И они держат у себя ключ в гите?)
bebebe
единственное, что я бы собирал контейнер с уже ansible плейбукой
bebebe
и подкладывал бы только inventory
inqfen
единственное, что я бы собирал контейнер с уже ansible плейбукой
И зачем мне в раннере все держать и пересобирать его при каждом изменении?
bebebe
это будет гарантировать что плейбука и inventory совместимы.
inqfen
Там не один плейбук, а под каждый репозиторий + инфраструктурные
bebebe
и? будет много контейнеров
bebebe
либо один с кучей репозиториев.
inqfen
Один образ с кучей репозиториев, которые ещё и изменяются
inqfen
И например разработчик переменную изменил, он пересобирает этот образ?
bebebe
разработчик изменяет переменную, и делает git push, дальше работает CI/CD, которые тестируют изменения, и если они валидны выкадвыает докер образ с :stable
inqfen
ключ в переменеую окружения + ссх агент https://docs.gitlab.com/ee/ci/ssh_keys/ Зачем ключ репозитории хранить?
Ещё раз, не сканает, потому что например в инфраструктурном проекте для окружения production будет один ключ для уже используемого сервера и дугой для только раскатанного инстанса aws
inqfen
Потому что там на сервере деплойного пользователя ещё нет
bebebe
основная цель этих телодвижений - это деливерить контейнер (рабочее окружение) который протестирован, и ready to use, а не отдельные плейбуки. не отдельные докер окружения где они могут запускаться, и не отдельные инвентори в которых вомзонжо есть конфлиткты в структуре и то как эту структуру использует плейбука
inqfen
основная цель этих телодвижений - это деливерить контейнер (рабочее окружение) который протестирован, и ready to use, а не отдельные плейбуки. не отдельные докер окружения где они могут запускаться, и не отдельные инвентори в которых вомзонжо есть конфлиткты в структуре и то как эту структуру использует плейбука
Не очень себе IaC, как раз по моему мнению все, что необходимо для деплоя должно жить в коде и быть декларативно описано, а не жить в образе. Разве что нужно делать ещё и отдельно делать проект, где у меня будет образ собираться, который будет тянуть и все другие проекты
bebebe
б-г в помощь
bebebe
основная идея - вы можете делать больше количество телодвижений решая определенную задачу вопрос что вы деливерите на выходе? в моем случае деливерится контейнер которые запускатся и делает свое дело, в нем уже находится необходимый inventory, плейбуки-роли которые прошли тестирование в связке между собой
inqfen
На выходе вообще запуск контейнера/ов с кодом на инстансе. Есть кучка проектов с сервисами и инфраструктурных проектов, при чем плейбуки в них могут быть и не связаны между собой никак. В текущей схеме условно говоря я могу отдать какой-то сервис в другой проект при чем и вместе с тем, как он и билдится и деплоится, этот процесс на другие сервисы может быть вообще не завязан (а в идеале и не должен, если у меня есть 20 сервисов например, то каждый должен разворачиваться вполне себе независимо). А в случае с образом, получается, что я как минимум билд и деплой всех сервисов должен хранить вместе
inqfen
Хотя из общего у них собственно только роли, которые лежат отдельно
bebebe
кул стори.
bebebe
я так понял, исторически сложилось?
inqfen
Подход разработки и доставки кода
inqfen
Все в IaC
bebebe
😉 давайте поговорим с какими проблемами вы сталкиваетесь ?
bebebe
с таким подходом
inqfen
Да в принципе особо ни с какими на самом деле, то что выше с ключами - тоже собственно не проблема, хотел уменьшить количество действий
inqfen
В другой конторе работал как раз с подходом деплой отдельно, код отдельно
inqfen
И своих подводных камней тоже хватало
bebebe
очень рад за вас
bebebe
bebebe
вы какую переменную имели в виду, которая привязана к плейбуке/роли или к инветори?
inqfen
Может быть и так и так
inqfen
Как пример, изменил существующую переменную - изменил инвентори, добавил новую - изменил шаблон
bebebe
не совсем понятно, а разрве разработчик может править inventory которое описывает окружение. разве это не делает deployment инженер?
inqfen
не совсем понятно, а разрве разработчик может править inventory которое описывает окружение. разве это не делает deployment инженер?
В group vars лежат ещё например переменные для .env, которые как раз таки при одинаковом шаблоне отличаются для каждого окружения
bebebe
т.е. у вас inventory окружений лежат рядом с плейбуками в одном репозитории?
inqfen
Да