Timur
Это понятно. Непонятно - почему при обновлении роли сразу всем обязательно нужно requirements обновлять?
inqfen
Ну в общем есть роль a версии 1.1.1 , она требует роль б версии 1.0.1 и роль в версии 1.2.1 я обновил роль а, до версии 1.2.1, теперь для нее требуется б версии 1.2.0 и в версии 1.2.1
Timur
Старая версия же никуда не девается
inqfen
в итоге если кто-то обновляет у себя версию моей роли ему нужно читать, а какие версии сейчас у зависимых ролей
inqfen
А так это сразу в meta прописано и вытягивается нужной версии
inqfen
нет
George
тогда я тебя прощаю )
Timur
Обновил роль - обновилась requirements
inqfen
Что мешает держать requirements в одной репе с ролью?
тогда придется делать в ci ansible-galaxy install 10 раз, это не единственнная роль которая плейбуку нужна
inqfen
Будет requirements в плейбуке, который должен выкачать роли, потом снова выкачать зависимые для них роли
George
сделай рекурсивный выкачиватор
George
(первое правило питон программиста - никогда не пытайся сделать системы для рекурсивного и бесконфликтного резолва зависимостей чего бы то ни было)
Timur
Обновляйте один файл для плейбуки со всеми реками - и все
inqfen
типа ansible-galaxy install -p roles -r requirements.yml find ./roles/ -name requirements.yml -type f -exec ansible-galaxy -install -p ../roles {}
inqfen
Обновляйте один файл для плейбуки со всеми реками - и все
ну вот, я про то же - если я обновляю только свою роль, другому человеку, который обновляет свой плейбук, нужно пойти в репу роли и посмотреть а что она сейчас требует
Timur
Просто держите requirements в одной репе с плейбукой для всех ролей
inqfen
а если обновит только версию моей роли - будет работать некорректно
inqfen
ну их может быть несколько десятков и еще раз - в подходе с dependencies я говорю кому-то - я это роль обновил на 1.2.1, можешь юзать, в подходе с перечиислением в одном requirements - я обновил роль до версии такой-то иди и смотри зависимости и не проеби
inqfen
ansible через пип же когда ставишь тебе не нужно отдельно прописывать джинджу, pyaml и все остальное
inqfen
И это логично, это зависимости. которые в самом пакете определены
inqfen
И в композере и везде так же
Timur
Никто же не заставляет сразу все обновлять
inqfen
Ну, учёт зависимостей - нормальная вещь. Если обновляешь плейбук - обнови и зависимости, это логично
нормальная вещь - когда зависимости для сущности описаны в ней, а не где-то в третьем месте
Timur
ansible через пип же когда ставишь тебе не нужно отдельно прописывать джинджу, pyaml и все остальное
Потому что установка ансибла делается одной плейбукой с requirements, условно говоря
Timur
А не каждый пишет свою плейбуку для установки ансибла
inqfen
ты когда deb пакет делаешь, зависимости в пакете описываешь или берешь пару пакетов и зависимости вне их пишешь?
Отделение Bereke Bank
Подскажите по тупому вопросу. Как обойти ошибку template error while templating string: unexpected char u'$'? 😊 он ругается на template-ы alertmanager-а
Timur
ansible-galaxy умеет выкачивать зависимости из многих файлов сразу
Timur
С инклудами
Timur
Прописывайте в requirements инклуды для каждой роли
inqfen
ansible-galaxy умеет выкачивать зависимости из многих файлов сразу
это классно, только пока он не скачал роль а - у него нет файла с ее зависимостями
Timur
С плейбукой
inqfen
есть роль, которая должна быть самодостаточной и реюзаемой
Timur
Роли отдельно, плейбуки отдельно
inqfen
А я зависимости роли уношу в другое место
inqfen
Роли отдельно, плейбуки отдельно
так она и так в другом репе
Timur
есть роль, которая должна быть самодостаточной и реюзаемой
Роль не является самодостаточной. Она включается в плейбук
inqfen
каждая роль в своем
inqfen
Роль не является самодостаточной. Она включается в плейбук
ее должно быть можно включить в любой плейбук и она за собой потянет все свои зависимости
Timur
так она и так в другом репе
Я не понимаю, как у вас выглядит структура проекта
inqfen
есть плейбуки, каждый в своем репе
inqfen
есть роли, каждая так же отдельно, выкачиваются через requirements
inqfen
Вот от такого подхода и идут все проблемы
Это стандартный подход любых пакетных менеджеров
inqfen
Еще раз - зависимости для deb пакета ты в пакет пишешь или куда?
inqfen
Или мне когда я ставлю пакет нужно куда-то пойти почитать, что нужно еще такие-то пакеты таких-то версий, а то не взлетит?
Timur
Если роли делаются нормально, то жесткая привязка к версиям не требуется
Timur
Можно брать последнюю актуальную
Timur
Соответственно, при обновлении одной роли, в реки сразу попадает последняя версия, как правило
Timur
И обновлять requirements для всех плейбук не нужно
inqfen
Можно брать последнюю актуальную
тогда мне нужно явно указать и зависимости для роли
inqfen
Ну и плюс, семвер не просто так выдумали, нередкая ситуация когда таки нельзя просто взять и указать послуднюю версию
Timur
Тот, кто использует роли, просто прописывает список нужных зависимостей для всей плейбуки и скачивает все роли нужных версий
inqfen
Тот, кто использует роли, просто прописывает список нужных зависимостей для всей плейбуки и скачивает все роли нужных версий
по аналогии, тот кто ставит ansible из репы должен писать apt install ansible ieee-data python3-bcrypt python3-jinja2 python3-jmespath python3-kerberos python3-libcloud python3-lockfile python3-netaddr python3-ntlm-auth python3-paramiko python3-pyasn1 python3-requests-kerberos python3-requests-ntlm python3-selinux python3-winrm python3-xmltodict ?
inqfen
или все-таки стандартный подход это когда зависимости прописаны там, где от них зависят?
inqfen
Зачем?
Я тоже считаю что незачем, и зависимости конкретной роли должны быть у нее прописаны, а не в плейбуке
George
т.е. это не ООП, черт возьми
George
или все-таки стандартный подход это когда зависимости прописаны там, где от них зависят?
поясни - откуда у тебя вообще взялась необходимость роли инклюдить в другие роли?
inqfen
я так понимаю, что РОЛИ не должны зависеть от других РОЛЕЙ
а почему бы нет, возможность такая есть и роль это грубо говоря такой пакет чего-то, почему один пакет не может от другого зависеть?