Ya
Реально мне кажется тут не ящик гвоздей а камаз )
Антон
Ya
это вывод
Ya
я потом делаю так что бы посмотреть
Ya
debug: msg: "{{ item }}" with_items: "{{ volume_fullname }}" run_once: true
Антон
вместо with_items рекомендуют юзать loop
Антон
Но это так, мелочи
Антон
debug: msg: "{{ item }}" with_items: "{{ volume_fullname }}" run_once: true
хорошо. как у тебя формируется volume_fullname?
Ya
set_fact: volume_fullname: "{{ item }}" loop: "{{ nodes | product(['stack1_']) | list }}" run_once: true
Антон
где и как ты потом юзаешь volume_fullname?
Антон
отлично, код в студию
Ya
file: path: /folder/{{ item }} state: directory mode: '0755' with_items: "{{ volume_fullname }}"
Антон
Антон
Ya
ну чоу )
Антон
file: path: /folder/{{ item }} state: directory mode: '0755' with_items: "{{ volume_fullname }}"
file: path: "/folder/stack1_{{ item }}" state: directory mode: '0755' loop: "{{ node}}"
Антон
все
Ya
блин _)
Антон
да. тебе задали 3 часа назад вопрос - зачем тебе это =)))
Ya
ну а че красивого решения склеить это нет ? надо тащить вот такие конструкции по плейбуку ? если не в одном месте юзаю ?
Антон
ответил бы сразу - получил бы решение на 3 часа раньше
Антон
в чем красота лишней переменной и как минимум 2 лишних шагов?
Антон
ну ок, одного
Ya
ну в принципе да, согласен просто так я переменных натолкаю а так один раз сделаю лист
Ya
хотя да лишний шаг........
Антон
ну в принципе да, согласен просто так я переменных натолкаю а так один раз сделаю лист
у тебя: 1. будет лишний шаг 2. тебе нужно помнить что это за переменная 3. просто не красиво
Ya
короче хорошая задачка на собеседовании может быть :)
Ya
просто что бы уметь :)
Антон
нет, это не хорошая задача на собес
Ya
ну сделать лист из листа и переменной интересно же )
Антон
хотя смотря кого собесить...
Ya
вроде кажется тривиальной )
Ya
да хер там прыгал )
Антон
ансибл - это не язык программирования, запомни
Ya
да я это как бэ знаю
Антон
да вот судя по тому что делаешь - знаешь, но не приемлишь )))
Ya
да ну не может быть, что такие простые вещи не реализуются
Антон
они реально простые, и я тебе показал как они делаются
Антон
то, что хочешь ты - это усложнение
Ya
там выше Тимур прислал решение на j2 :))) прям реально тоже похлещзе регулярок )
Ya
Ya
реально Xk`uzme )_
Ya
Спасибо Антон )
Ya
Антон
почитал - там ничего сложного. выглядит страшно, но по сути крайне просто )
Антон
Ya
подставлять по месту - работает сразу и красиво )
Vladimir
Всем привет. Аnsible не умеет в шаблоне в переменную записывать результат выполнения bash команды ? Например, хочу копировать файл из шаблона. А там переменная х, которая является результатом выполнения команды.
Андрей
Зачем тебе bash, если есть Ansible?
Vladimir
Зачем тебе bash, если есть Ansible?
Смотри. Я хочу создать пользователя в openldap. Шаблоном копирую ldif файл для лдапа. Но мне нужно задать uid. А я не хочу вручную. Команда ldapsearch -H ldaps://localhost -D "cn=admin,dc=test,dc=ru" -w 123 | awk '/uidNumber: / {print $2}' | sort | tail -n 1 покажет максимальный. И я хочу увелчивая на 1 записывать его в шаблон
Андрей
https://docs.ansible.com/ansible/latest/modules/ldap_entry_module.html
Андрей
А почему готовым модулем не воспользоваться?
Pavel
если уж так хочешь странного, ты можешь свой баш запихнуть в предидущий шаг и сделать сетфакт в переменную, а ее уже использовать в шаблоне
Vladimir
А почему готовым модулем не воспользоваться?
Здесь насколько я понял тоже вручную uid задавать надо
Андрей
Я не знаю, по-моему практически любая задача, в том числе и эта решается с помощью Ansible
Андрей
Так uid можно обычно через loop или with_items задать, разве нет?
Андрей
или задача, чтобы по порядку uid в openldap шли?
Vladimir
или задача, чтобы по порядку uid в openldap шли?
Да. Потому есть вероятность, что не только ansible будет создавать учётки. А ещё вручную через вэб
Андрей
тогда в Playbook можно использовать модуль shell или command и через факты передвать переменную
Андрей
тоже как вариант)
Deyvis
Коллеги, день добрый.
Deyvis
Может кто подсказать, как подсчитать число нод в группе интентори?
⌬ Дмитрий ⌬
коллеги - нужен совет: есть набор ролей: одна создает дроплет на DO, а ряд других ролей должны с этими дроплетами поработать. В роли создания дроплета создаю инвентори файл, и туда записываю новоиспеченный дроплет, но при запуске плейбука в котором описаны все роли, начиная с создания, получаю ошибку в том что: no hosts matched. Как лучше передать запуск следующей роли, с новым хостом в инвентори? Как должен примерно выглядеть такой плейбук?
Андрей
У тебя инвентори не должно в роли лежать
Андрей
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
Андрей
почитайте для начала вот эту статью
⌬ Дмитрий ⌬
У тебя инвентори не должно в роли лежать
Инвентори отдельно, туда создается группа с новыми дроплетами. Мне нужно понять как этот инвентори использовать в следующих ролях
Андрей
Тогда динамический создавать
Evgeny
его даже создавать не надо https://github.com/geerlingguy/ansible-for-devops/tree/master/dynamic-inventory/digitalocean
⌬ Дмитрий ⌬
Тогда динамический создавать
Ок, он и так создается динамически. Вопрос больше к тому как должен выглядеть плейбук для работы с этим динамическим инвентори у меня на старте получилось пока так: - hosts: localhost connection: local become: no roles: - droplets Для следующих ролей нужно уже использовать динамический инвентори - и я так понимаю что в этом буке что то надо поменять.
Evgeny
а вообще в ансибле куча модулей для работы с DO, можно создать дроплет, зарегистрировать переменную и дальше уже использовать. Или так вам не подходит?
Vladimir
тогда в Playbook можно использовать модуль shell или command и через факты передвать переменную
Спасибо. Способ рабочий. А как научить динамически увеличить переменную на 1 ? То есть скрипт отдаёт в set_fact переменную, но если копировать через шаблон в разных файлах переменная не менятся
⌬ Дмитрий ⌬
коллеги - вот ответ на мой вопрос, которыйв принципе решил мою задачу, для того чтоб запустить роль на разном хосте (в том числе и динамически генерируемом) в плейбуке - вызвал запуск роли примерно так: roles: - { role: droplets, inventory_hostname = 'localhost' } - { role: docker-init, hosts = 'do_droplets' }