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
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 👻
Vladislav 👻
можно проверять наличия ключа в нужном словаре при помощи if '<key>' in <dict>
Vladislav 👻
но с такой вложенностью вам надо много проверок...
Денис
ясно, спасибо, чего-нибудь придумаю тогда
Vladislav 👻
кстати, хоть это и особенность питона, но данный момент именно в ансибле больше всего раздражает 🙁
Денис
а если я где-то объявлю дефолтный скелет словаря в котором все ключи будут null, и через | combine() буду подставлять уже значения из group_vars, это вообще сильно неправильно?
Денис
сколько это по шкале от "сойдёт" до "не надо так"
Victor
мне кажется это какой-то кривой совсем подход
Victor
по шкале это "костыль"
Victor
Почему у тебя вообще в теплейте забит юзер?
Денис
эт не юзер, это подключение к биллинговой системе приложения, приложение монолитное с огромным xml конфигом
Денис
и пока такое и останется
Денис
идея была в том, чтобы под каждое окружение, был свой словарь в group vars, в котором указаны все значения для окружения
Денис
и до этого момента всё было неплохо :)
Victor
Andrey
Ребят, а видел кто-нибудь плейбуки для работы в Google Apps For Business?
Ну юзеров там создавать/удалять и тп.
Денис
Victor
во вторых ты как-то странно темплейтишь если пытаешься зайти в ветку которой нет
Денис
ну потому что на примере той же биллинговой системы, у одного окружения она может быть одна, с одним набором параметров, у второй другая, у третьей сразу 3
Victor
лан, про темплейтинг xml ничего найти не могу, так что на это забьем.
Почему не запустить луп для генерации части конфига для каждого ключа в дикте?
Victor
Вместо указания самого ключа?
Денис
в любом случае, это больше хотелка, чтобы в груп варсах было поменьше строк
Денис
Timur
Timur
Если нужно что-то записать в уже имеющийся словарь - то только через combine
Vladislav 👻
А в ansible на таск можно with_items в with_items делать? 😬
Vladislav 👻
мне надо по одному словарю прогнать второй
Денис
Денис
Таск в отдельный файл, и инклуд его с withitems
Денис
А внутри таск в еще одним
zhag
Господа а как в ansible.cfg вставить ansible_python_interpreter ???
Vladislav 👻
Денис
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 👻
Vladislav 👻
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#loop-control
Vladislav 👻
вот нашел, как на лупах через инклуд делать, прям в лоб пример, спасибо за помощь! 👍
Dmitry
Все еще бьюсь о проблему сред мержа dev-> prod из разных веток. кто-нибудь использует .gitattributes?
NM
Dmitry
Dmitry
а точнее, меня интересует вопросы с vault, group_vars и параметрами ec2.py
NM
Да там среду задаешь
NM
environments/
development/
group_vars/
host_vars/
inventory
production/
group_vars/
host_vars/
inventory
roles/
Dmitry
Dmitry
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 что -то знает или наоборот не в тему говорит. Искренне хочу услышать совет опытного человека
Dmitry
NM
Именно так, как в bamboo и сделано через роли а не binary, чуть выше уровнем возьми.😀
Alexander