Victor
Но это не точно.
Vladislav 👻
Подскажите, как можно передать лист? т.е. вот есть у меня в vault такая структура: vault_users: - login: ttt1 pass: ttt1 - login: ttt2 pass: ttt2 Как мне потом vault_users подставить в другую переменную, которая будет переопределена и завязана на таске?
Vladislav 👻
Вроде бы решение в лоб nginx_basic_auth_users: "{{ vault_users }}" не заходит
Eugeny
- name: add several users user: name: "{{ item.name }}" state: present groups: "{{ item.groups }}" with_items: - { name: 'testuser1', groups: 'wheel' } - { name: 'testuser2', groups: 'root' } так не?
Vladislav 👻
да, конечная логика такая, но в with_items я не буду руками заносить пользователей, поэтому и вопрос, как это передать, причем путь будет как vault - var - task
Timur
Вроде бы решение в лоб nginx_basic_auth_users: "{{ vault_users }}" не заходит
- set_fact: nginx_basic_auth_users: '{{ nginx_basic_auth_users | default({}) | combine(vault_users) }}'
Vladislav 👻
🤔 спасибо
Eugeny
вот тут кажется то что тебе нужно https://www.serverlab.ca/tutorials/dev-ops/automation/using-hashicorp-vault-with-ansible-jinja2-templates/
Денис
Есть в шаблоне строка: password1="{{ item['wfs']['billing']['robox']['password1'] | default ("") }}" собственно сама переменная wfs: billing: robox: password1: 345 Проблема: когда не объявлены все переменные перед password1, например: wfs: billing: smthother: Модуль template ругается, что переменная robox не объявлена, с этим можно как-то бороться?
Денис
или надо для каждого такого случая писать что-то вроде {% if billing is not defined %} {% set billing = [] %} {% endif %}
Денис
я ожидал, что он сможет выставить значение по умолчанию, и мне не придется указывать все эти переменные для каждого окружения
Vladislav 👻
можно проверять наличия ключа в нужном словаре при помощи if '<key>' in <dict>
Vladislav 👻
но с такой вложенностью вам надо много проверок...
Денис
ясно, спасибо, чего-нибудь придумаю тогда
Vladislav 👻
кстати, хоть это и особенность питона, но данный момент именно в ансибле больше всего раздражает 🙁
Денис
а если я где-то объявлю дефолтный скелет словаря в котором все ключи будут null, и через | combine() буду подставлять уже значения из group_vars, это вообще сильно неправильно?
Денис
сколько это по шкале от "сойдёт" до "не надо так"
Victor
мне кажется это какой-то кривой совсем подход
Victor
по шкале это "костыль"
Victor
Почему у тебя вообще в теплейте забит юзер?
Денис
эт не юзер, это подключение к биллинговой системе приложения, приложение монолитное с огромным xml конфигом
Денис
и пока такое и останется
Денис
идея была в том, чтобы под каждое окружение, был свой словарь в group vars, в котором указаны все значения для окружения
Денис
и до этого момента всё было неплохо :)
Victor
эт не юзер, это подключение к биллинговой системе приложения, приложение монолитное с огромным xml конфигом
в 2к18 геренерить xml теплейтом, не знаю почему, но где-то в интернете было что делать так не надо.
Andrey
Ребят, а видел кто-нибудь плейбуки для работы в Google Apps For Business? Ну юзеров там создавать/удалять и тп.
Victor
во вторых ты как-то странно темплейтишь если пытаешься зайти в ветку которой нет
Денис
ну потому что на примере той же биллинговой системы, у одного окружения она может быть одна, с одним набором параметров, у второй другая, у третьей сразу 3
Victor
лан, про темплейтинг xml ничего найти не могу, так что на это забьем. Почему не запустить луп для генерации части конфига для каждого ключа в дикте?
Victor
Вместо указания самого ключа?
Денис
в любом случае, это больше хотелка, чтобы в груп варсах было поменьше строк
Timur
Если нужно что-то записать в уже имеющийся словарь - то только через combine
Vladislav 👻
А в ansible на таск можно with_items в with_items делать? 😬
Vladislav 👻
мне надо по одному словарю прогнать второй
Денис
Таск в отдельный файл, и инклуд его с withitems
Денис
А внутри таск в еще одним
Pavel
мне надо по одному словарю прогнать второй
так? https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#complex-loops
zhag
Господа а как в ansible.cfg вставить ansible_python_interpreter ???
Vladislav 👻
Таск в отдельный файл, и инклуд его с withitems
а как тогда передать в таск значения итемов из внешнего цикла?
Денис
Loop_control: Loop_var: outer_item
Денис
И изнутри к нему можно обращаться через эту переменную
Денис
В доке про циклы есть пример, с телефона неудобно ссылку искать
Vladislav 👻
понял, спасибо, сейчас посмотрю
Денис
не, цикл в цикле надо
Обычно with_together делает цикл в цикле, но это со списками, со словарями я не делал, но там был какой-то фильтр, чтобы привести словарь к списку
Денис
Возможно так будет правильнее
Денис
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#with-together
Денис
Типа такого
Vladislav 👻
да, это я увидел, но решение костыльное, мягко говоря
Vladislav 👻
when: item.use_ssl | default('false') а почему вот такая конструкция не работает, если use_ssl не объявлен? Приходиться дописывать == True...
Vladislav 👻
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#loop-control
Vladislav 👻
вот нашел, как на лупах через инклуд делать, прям в лоб пример, спасибо за помощь! 👍
Dmitry
Все еще бьюсь о проблему сред мержа dev-> prod из разных веток. кто-нибудь использует .gitattributes?
Dmitry
а точнее, меня интересует вопросы с vault, group_vars и параметрами ec2.py
NM
Да там среду задаешь
NM
environments/ development/ group_vars/ host_vars/ inventory production/ group_vars/ host_vars/ inventory roles/
Dmitry
environments/ development/ group_vars/ host_vars/ inventory production/ group_vars/ host_vars/ inventory roles/
Что-то с форматированием? Меня интересует как происходит мерж содержания этих папок?
Dmitry
Да там среду задаешь
В конфиге для ec2.py? Это понятно. Как работает алгоритм мержа когда в dev бранче у тебя одно значение а в prod совершенно другое?
NM
Чекает окружение и по .git@$$& смотрит куда и какая ветка мержится.
NM
Бранч то как создаешь ?
Dmitry
Dmitry
Я пока не уверен что это возможно при таком подходе
Dmitry
но ты переубеждаешь меня в другом?
Dmitry
есть бранч dev, в нем inventory/group_vars/cluster.yml, допустим с содержанием stripe_key: 123, и есть бранч prod, в нем inventory/group_vars/cluster.yml с содержанием stripe_key:987
Dmitry
при создании пулл реквеста все изменения в бранче dev должны перетечь в prod по более-менее стандартному git flow. Эти значения которые я указал не могут перетекать, потому что относятся толькк своей ветке.
Dmitry
Можно мердж полиси наконфигурить.
Ну вот я с этого и начал вопрос) просто я не пойму, @corsars77 что -то знает или наоборот не в тему говорит. Искренне хочу услышать совет опытного человека
Никита
Ну вот я с этого и начал вопрос) просто я не пойму, @corsars77 что -то знает или наоборот не в тему говорит. Искренне хочу услышать совет опытного человека
Только это не полиси, а стратеджи. Тут даже что-то типа мануала есть: https://medium.com/@porteneuve/how-to-make-git-preserve-specific-files-while-merging-18c92343826b
Dmitry
Только это не полиси, а стратеджи. Тут даже что-то типа мануала есть: https://medium.com/@porteneuve/how-to-make-git-preserve-specific-files-while-merging-18c92343826b
да, там начинается вопрос мерж драйвера итд... Ты делал это? поделись мудростью я пока остановился на merge_strategy=binary
NM
Именно так, как в bamboo и сделано через роли а не binary, чуть выше уровнем возьми.😀