Timur
и самое страшное : теперь я получаю содержимое справочника с опциями виртуалок. теперь нужно перебрать по каждому серверу. я так понимаю что это nested loop?
А чего там перебирать? Вам же параметры нужны в рамках одного модуля, наверное? Там просто в рамках каждой итерации подставляете разные ключи словаря - и все
Ilya
Имена могут быть разные у серверов. ipa, replica.
Ilya
или вообще другие и совершенно другим количеством.
Ilya
т.е. зашел в а1 - и начал перебирать, плодить виртуалки.
Ilya
потом заешл в а2 и снова цикл по серверам
Timur
Тут уже нужна конкретика. Дайте пример кода, который вы хотите реализовать
Ilya
да, занимаюсь.
George
сорян, у меня сегодня мозг не работает
George
- 10.222.253.12 - 10.222.253.13 - 10.222.253.14 ... - 10.222.253.100 как такой массив джинджей циклом сделать в одну строчку?
Denis
Фильтр join
George
нет
George
я хочу какую-то магию типа {{ blablaba_make_list (10.222.253.12....10.222.253.100) }}
George
и чтоб оно развернулось в список
Timur
Так нужно из списка строку сделать или из строки список?
George
мне нужно сгенерировать список значений по шаблону
Denis
Странновато
Denis
Я бы, наверное, сделал таску с циклом и set_facts
Ilya
Тут уже нужна конкретика. Дайте пример кода, который вы хотите реализовать
вот пример, идея. но не рабочий. т.е можно ли вообще такое релизовать? - name: loop debug: msg: - "{{ item[0] }}" - "{{ item[1] }}" with_nested: - "{{ instance }}" - "{{ lookup ('vars', item).vm_infrastructure_options }}"
Ilya
(with_nested - для наглядности, что имелось ввиду.) {"msg": "'item' is undefined"}
George
Странновато
почему? норм
Ilya
вот рабочий вариант: - name: loop debug: msg: - "{{ item[0] }}" - "{{ item[1] }}" with_nested: - "{{ instance }}" - "{{ a1.vm_infrastructure_options }}" - но опять таки, а1 - нужно динамически подставлять из instance
Denis
почему? норм
Мне всегда казалось, что джинджа в ансибле используется для создания строк. Если можно создать такую строку, которую ансибл затем интерпретирует как запись массива, может сработать. Но, как по мне, странновато.
George
ну, джиндой я могу такой лист создать за три строчки джинджы.
George
ладно, сам подумаю. спасибо, блин (
George
"Если можно создать такую строку, которую ансибл затем интерпретирует как запись массива, может сработать." однозначно
Timur
Тогда nested будет работать
Timur
вот пример, идея. но не рабочий. т.е можно ли вообще такое релизовать? - name: loop debug: msg: - "{{ item[0] }}" - "{{ item[1] }}" with_nested: - "{{ instance }}" - "{{ lookup ('vars', item).vm_infrastructure_options }}"
А так? - name: loop debug: msg: - "{{ item[0] }}" - "{{ item[1] }}" with_nested: - "{{ instance.values() | list }}" - "{{ lookup ('vars', item).vm_infrastructure_options }}"
Ilya
сча
Ilya
{"msg": "'list object' has no attribute 'values'"}
Timur
У вас же там просто имена
Timur
Тогда как вариант - лупом собрать данные в один список
Timur
А потом на полученный список сделать nested loop
George
вот такое и виделось, ога
Dr. L.S.Dee
Т.е., на выходе должна получиться строка, содержащая IP от 10.222.253.12 до 10.222.253.100. Для этого нам нужно подать массив IP-адресов от 10.222.253.12 до 10.222.253.100. А этот массив, в свою очередь, сгенерировать из первого и последнего адреса. В этом и задача? Python, если не ошибаюсь? Понятия не имею, как именно там все происходит, но в рамках последнего (крайнего правого) октета можно и range(12, 101) [1] задать же? А потом для каждого приклеить слева остальные октеты. ____ [1] Пишут, что последнее значение в рейндж не включается O_o
Dr. L.S.Dee
А, уже.
Denis
Но еще и в одну строку))
George
в виде джинджа шаблона внутри блока {{ }}
George
если кому интересно "{{ lookup('sequence', 'start=11 count=90 format=10.222.253.%d', wantlist=True) }}"
George
без циклов и прочей дичи
Timur
Респект и уважуха!
Denis
и самое страшное : теперь я получаю содержимое справочника с опциями виртуалок. теперь нужно перебрать по каждому серверу. я так понимаю что это nested loop?
Можно для каждого instance в цикле делать import_task с циклом по виртуалкам внутри (реализация цикла в цикле). Второй вариант, если у всех виртуалок уникальные имена, можно в цикле пройтись по всем инстансам и объединить их содержимое в одну переменную через combine()
Ilya
Можно для каждого instance в цикле делать import_task с циклом по виртуалкам внутри (реализация цикла в цикле). Второй вариант, если у всех виртуалок уникальные имена, можно в цикле пройтись по всем инстансам и объединить их содержимое в одну переменную через combine()
имена в словарях могут быть и не уникальные, в конечном результате, имя конечно будет уникальным, т.к. оно формируется из имя + домен. интсансы могут быть однотипными. те.е как пример "тест", "прод", а внутри них все зеркально.
Ilya
Тогда можно через import_tasks
читаю доки, спасибо.
Denis
Но возникает вопрос, обязательно ли все инстансы разворачивать в одном плейбуке. Может проще сделать по одному плейбуку на инстанс, например, а если их нужно разворачивать несколько - использовать плейбук с import_playbook, например
Denis
Разворачивание инстанса оформить в роль, и в плейбуках вызывать ее с разными параметрами.
Ilya
Но возникает вопрос, обязательно ли все инстансы разворачивать в одном плейбуке. Может проще сделать по одному плейбуку на инстанс, например, а если их нужно разворачивать несколько - использовать плейбук с import_playbook, например
Согласен. не обязательно. можно имя инстанса передать как переменная командной строки при вызове плейбука. Но вот захотелось выпендриться и сделать вообще все одной кнопкой. Потом, через гитлаб чтоб развернулось.
Denis
Имя инстанса можно определить в переменных плейбука, и на каждый инстанс создать по плейбуку. Если список инстансов небольшой и меняется редко, возможно, так будет удобнее. Тогда одной кнопкой их можно будет разворачивать из "сверхплейбука", в котором будут последовательно импортироваться все плейбуки для инстансов.
Timur
Чуть позже сегодня попробую вариант предложить
Antuan
Есть кто-нибудь, кто с помощью Ansible работал с RouterOS и хорошо разбирается в сетях? Консультации + удаленная работа
George
ну, я так понял, что не договорились, да?
Artem
подскажите плз как в ansible копировать шифрованный с помощью ansible-vault файл на удаленный хост?
Artem
кроме предварительного дешифрования
Vladislav 👻
copy/template
Artem
ах точно пропустил, спасибо!
marantz
https://mikrotik-training.ru/kb/playbook-dlya-ansible-nastrojka-mikrotik-pki-i-openvpn-servera/
/warn
Подскажите, если пакете pip стоит параметр virtualenv - то он сам активируеться, или надо до этого прописать создание виртенва?
George
что значит сам активируется?
/warn
что значит сам активируется?
Ну, тип. Надо ли его до этого создавать?
George
да, насколько я помню, виртенв должен быть на винчестере уже создан
/warn
То есть, надо вот это делать? - name: prepare virtual env shell: virtualenv "{{ zuul_project_dir }}/venv"
/warn
Понял, спасибо
Alexander
Приветствую! У меня нубский вопрос: Как в аргументах указать сразу несколько хостов: Например ansible -m ping -a host1, host2
ℭ𝔞𝔯𝔯𝔬𝔩
Vladislav 👻
запятая обязательна на конце
George
ansible all -i host1,host2, -m ping
Но это же говно
George
Где логика ?!
Vladislav 👻
Как спросили, так ответил