Andor
предположим что у меня есть модуль nginxinc.nginx и он параметром принимает имя шаблона для конфига nginx, как мне сказать чтобы он брал шаблон из моей роли, а не из своей?
Anonymous
@asdfasdfasdf будет жить. Поприветствуем!
Andor
да
George
если это не сделано в виде переменной (имя файла с темплейтом), то никак
George
форкаешь роль, дорабатываешь
Andor
template_file: nginx.conf.j2очевидно он ролью нжинкса подтянется из самой этой роли
George
публикуешь как свю
Timur
ну роль, не модуль
Если роль, то какая проблема?
Andor
как мне ему сказать чтобы он брал шаблон не от себя, а из моей самодельной роли?
Andor
моя роль использует роль nginxinc.nginx
Andor
и я хочу подменить ей шаблон
Timur
???
Andor
- name: import nginx role import_role: name: nginxinc.nginx
Andor
форкаешь роль, дорабатываешь
уже пофоркал, щас буду им пулл-реквест посылать
Timur
- name: import nginx role import_role: name: nginxinc.nginx
Ну и? Просто указываешь переменные с нужными путями к твоим шаблонам
Timur
В чем проблема-то?
Andor
ну вопрос-то в том чтобы указать в переменную что-то чтобы оно брало не из своей роли шаблон, а из моей
Andor
туда прямо ../mynginx/templates/... можно указать что ли?
Andor
или в каком виде?
Timur
This can be a relative or an absolute path.
Andor
о как
Andor
спасибо, щас попробую
Andor
а как этот путь будет выглядеть? допустим моя кастомная роль называется mynginx
John
если ansible-doc -l | grep napalm napalm_install_config Installs the configuration taken from a file on a device supported by NAPALM значит ли это что модуль в системе есть и его можно использовать? спрашиваю потому что: TASK [Install new configuration] **************************************************************** fatal: [vyos]: FAILED! => {"changed": false, "msg": "the python module napalm is required"}
Andor
хотя ща почитаю
John
ой, а сам таск выглядит так: tasks: - name: Install new configuration napalm_install_config: hostname: "{{ ansible_ssh_host | default('vyos') }}" username: "{{ ansible_ssh_user | default('vyos') }}" выше отрывок из таска
Andor
а как этот путь будет выглядеть? допустим моя кастомная роль называется mynginx
template_file: ../../mynginx/templates/nginx.conf.jinja2 # take template from our custom nginx module
Andor
некрасиво, но работает
Andor
всем спасибо
John
ну и на всякий случай: $ python -m pip list | egrep "ansible|napalm" ansible (2.8.0) napalm (2.4.0) napalm-ansible (1.0.0) napalm-base (1.0.0) napalm-vyos (0.1.6)
Oleksandr
а как уважаемые господа в ансибле забирают статусы всех контейнеров докера, которые есть на машине?
Oleksandr
docker_container_info работает с указанным именем контейнера
Oleksandr
а хотелось бы чтобы без баша и чтобы сам нашел все
Timur
а как уважаемые господа в ансибле забирают статусы всех контейнеров докера, которые есть на машине?
Можно через docker_host_info собрать инфу о всех объектах, включая контейнеры, а потом лупом по ним пройтись, вызывая docker_container_info
Anonymous
@maximberdyshev будет жить. Поприветствуем!
Anonymous
@madmanidze будет жить. Поприветствуем!
Roman
Добрый день! Напомните пожалуйста, в jinja2 template, что бы выставить условие if var == value, как корректно запись выглядит? Так? {% if 'var' == value %} blabla {% endif %} Или что то упускаю?
Roman
В общем без ковычек нужно:)
Andor
я могу из хендлера моей роли дёрнуть хендлер в другой роли?
Sergey
То есть ты понимаешь, что шлёшь лесом всю объектную модель Ansible и сам смысл хэндлеров?....
Andor
То есть ты понимаешь, что шлёшь лесом всю объектную модель Ansible и сам смысл хэндлеров?....
ты так говоришь как будто у ансибля есть "объектная модель"
Andor
ну вот представь, что я делают include_role, потом рядом кладу кусок конфигурации для приложения в той роли и хочу дёрнуть родной хендлер, а не делать ещё раз nginx reload
Timur
я могу из хендлера моей роли дёрнуть хендлер в другой роли?
Что значит "дернуть хендлер в другой роли"? Хендлер - это сущность в рамках роли. Если есть необходимость его дергать откуда-то еще, значит у вас неверно сделано разделение по ролям, только и всего
Timur
ну я конечно понимаю что ансибль это pssh на стероидах и что-то умнее на нём строить сложно и больно, но вдруг
стероиды тут ни при чем. Есть правильный подход к проектированию и декомпозиции задач. А есть мешанина из всего в стиле баша. Второго стоит избегать.
Timur
ну вот представь, что я делают include_role, потом рядом кладу кусок конфигурации для приложения в той роли и хочу дёрнуть родной хендлер, а не делать ещё раз nginx reload
Если есть роль, которая настраивает приложение, все конфиги этого приложения должны делаться этой же ролью, возможно, с мультивызовом, но этой же, а не чем-то еще. Если вам нужно обрабатывать логику настройки приложения за пределами роли, то весь смысл роли просто теряется.
Timur
Я говорю совершенно иное
Timur
Абстракции делать правильно. А ломать логику абстракций - нет
Andor
ну ой, не умеет эта роль делать кастомные конфиги так как удобно мне, а свою херачить я не хочу
Sergey
А is for Абстракция но раз ты говоришь что абстракции делать ансиблём это неправильно, то я тебе верю
Речь-то о том, что роль (пусть и параметризированная) должна полностью отвечать за настройку компонента, иначе опять башсибл получается.
Timur
ну ой, не умеет эта роль делать кастомные конфиги так как удобно мне, а свою херачить я не хочу
Значит, либо меняем роль, либо делаем другую со своими хендлерами. Либо вообще забиваем на роли и делаем все тупо через плейбуку, если так сложно разделить зоны ответственности
Andor
спасибо, что научил
Andor
вообще это смешно. сначала говорят что дёргать хендлеры из хендлеров это неправильно, а потом показывают на listen который делает практически это
Andor
#странное
Andor
Дергать хендлеры из хендлеров можно. Но все это в рамках одной роли
https://medium.com/@george.shuklin/listen-feature-for-handlers-in-ansible-29183524c7e1 тут чётко написано про разные роли
Andor
неправда написана?
Timur
Правда написана. Но это плохой подход. Роли получаются зависимыми друг от друга. И при изменении кода одной (например, набора хендлеров или триггеров) придется соответствующим образом менять и другие. Иначе все сломается
Timur
Тогда возникает резонный вопрос - зачем нам вообще три отдельные роли, если по-отдельности они нормально работать не могут, как и меняться независимо друг от друга?
Andor
а вот предположим у меня есть group_vars/all/stuff.yaml в котором есть какой-то дикт если я делаю include_role с vars: ... в котором указываю эту же переменную с диктом, она же просто заменится без вариантов? или можно как-то смёржить эти два дикта?
Andor
2 и 3 роль - независимы друг от друга, но зависимы от 1