Timur
Теги могут вкладываться друг в друга, но на сами записи в виде хостов это никак не влияет
Timur
И не нужно никакого программирования на ямле при этом
Yerlan
День добрый. Подскажите: прогоняю таск с модулем lineinfile, вставка некоторых значении просходит, некоторых нет (они уже присутствуют в файле). Как заставить анзибл делать вставку несмотря на наличия строки/значения в файле?
matt
такое лучше темплейтить
Timur
Не очень понятна суть проблемы
Yerlan
есть большой файл конфигов, в нем идут блоки, значения в этих блоках могут быть одинаковымии со значениями других блоков
Timur
И вам нужно менять много параметров за раз?
Asgoret
Всем привет! Можете подсказать корректный синтаксис? Кейс: Нужно распарсить стринг в лист. У меня: работает loop: "{{ lookup('vars', 'port').split(',') }}" не работает loop: - port_list: "{{ lookup('vars', 'port').split(',') }}" Ожидается: "msg": [ "8080", "8081" Получаю: port_list': [u'8080', u'8081']}
Александр
Если там цифры, то без кавычек
Timur
Понятнее не стало
Александр
🤔
Asgoret
В чем суть проблемы? Работающий вариант вы привели. Чем он не устраивает?
line: |- - protocol: {{ protocol }} port: {{ item.port_list }} targetPort: {{ item.route_port_list }} name: {{ item.port_list }}-{{ protocol|lower }} loop: - port_list: "{{ lookup('vars', port).split(',') }}" - route_port_list: "{{ lookup('vars', route_port).split(',') }}"
Asgoret
Понятнее не стало
из списка листов, нам нужно взять разные значения, для разных переменных)
Timur
И?
Asgoret
И?
и проблема в том, что оно не работает
Asgoret
И?
он вставляет все в одно, должен вставлять уникально
Timur
Вам нужен параллельный луп по двум спискам?
Asgoret
как я понял в один луп нужно положить оба списка, чтобы это было одним item, но не могу нагуглить корректный синтаксис т.к данные не единичны (пример: port: 8080,8081 )
Timur
Попробуйте что-то вроде такого: - name: with_together debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ list_one|zip(list_two)|list }}"
Timur
Нет
Timur
Будет как раз параллельный луп
Danis
Как в pre_tasks > setup > filter указать несколько элементов?
Asgoret
Нет
а как тогда переменные из 1 списка вставить в одни переменные, а переменные из списка 2 в другие?
Timur
item.0 и item.1
Asgoret
ок
Danis
- hosts: all gather_facts: - setup: filter: - ansible_default_ipv4 - ansible_nodename Здесь не работает использование списка. Как решить это?
Danis
- hosts: all gather_facts: - setup: filter: ansible_default_ipv4 Вот так работает.
Danis
Чего вы хотите добиться?
Хочу использовать 2 переменные при отключенном gathering.
Asgoret
item.0 и item.1
эм... changed: [localhost] => (item=[u'"', u'4']) changed: [localhost] => (item=[u'8', u',']) changed: [localhost] => (item=[u'0', u'5']) Он вообще разобрался цифры на отдельные знаки)
Asgoret
Покажите код
- hosts: localhost connection: local vars: protocol: TCP port: 8080,8081 route_port: 9999,2343 tasks: - name: Prepare service conf lineinfile: path: state: present insertafter: "^port:" line: |- - protocol: {{ protocol }} port: {{ item.0 }} targetPort: {{ item.1 }} name: {{ item.0 }}-{{ protocol|lower }} loop: "{{ port|zip(route_port)|list }}"
Asgoret
Покажите код
кейс: он должен вставить этот кусок кода 2 раза (связка позиция 0 к позиции 0, 1 к 1 и так далее) те дописа еще два значения, он должен будет вставить уже 3 раза этот кусок
Asgoret
пока был 1 список все прекрасно) добавил второй и уже не так радужно)
Asgoret
Покажите код
моя ошибка, не так данные передаю
Asgoret
Работает корректно - hosts: localhost connection: local vars: protocol: TCP port: [ 8080,8081,4444445 ] route_port: [ 9999,2343,1 ] tasks: - name: Prepare service conf lineinfile: path: state: present insertafter: "^port:" line: |- - protocol: {{ protocol }} port: {{ item.0 }} targetPort: {{ item.1 }} name: {{ item.0 }}-{{ protocol|lower }} loop: "{{ port|zip(route_port)|list }}"
Asgoret
У вас var.port и var.route_port не списки, а строки? а зачем?
Манагер: ну разработчикам же будет сложно. вот сейчас они просто дописали в строку необходимые порты и все полетело, а по другому мы не хотим
Asgoret
Asgoret
ОК. Я долго коментировал
Сам таск это перенести 1000+ строчный баш в ансибл
Sergey
ℭ𝔞𝔯𝔯𝔬𝔩
Можно строку на входе конвертировать в список
ℭ𝔞𝔯𝔯𝔬𝔩
Asgoret
зато развитие и скилл...да задача еб... но осознали, что нагадили и хотят убрать, уже хорошо
Timur
- hosts: all gather_facts: - setup: filter: - ansible_default_ipv4 - ansible_nodename Здесь не работает использование списка. Как решить это?
Можно попробовать костыль в виде лупа: - name: Set facts setup: filter: "{{ item }}" loop: - ansible_nodename - ansible_default_ipv4
Ivan
Всем привет! Никто не сталкивался с проблемой запуска templates в AWX, проблема заключается в том, что не могу повысить привилегии до sudo, в cli это выглядит так "-K —become", в AWX выходить ошибка - permission denied, хотя в настройках tempate я установил галочку "Enable Privilege Escalation"?
/warn
Добрый день. Такая проблема awx notification при отправке письма на почту не высылает все хосты на который job зафейлил, а только первые 2-3. Кто-то сталкивался с подобным?
Павел П.
разобрался
что было?
Ivan
проблема была в том, что в CREDENTIALS я использовал PRIVILEGE ESCALATION USERNAME своего пользователя. Привык запускать в cli - "-K —become", а AWX использует --become-user=, решением было установить пользователя root.
Павел П.
куль)
/warn
Или может кто-то знает где сорсы черещ которые awx высилает письма?
Павел П.
а как вообще этот нотификейшн настроить? в гугле ничего нет. Куда адрес и пароль от почты вбивать-то?)
/warn
Ну тип, совсем рандомно. Там точно что-то сломанно в сорсах этих нотификаций. То оно мне все хосты кидает, то 1-2.
Павел
Все понял, я просто не умею читать =(
Павел
Товарищи, в 2.7 ансибл говорит, что делать loop при установке пакетов - это фи, но пропала возможность видеть для какого итема все прошло успешно, а какой упал, какой обновился, какой остался прежней версии. Есть какая-то возможность с новым синтаксисом видеть, как оно выполнилось для каждого итема?
Павел
А можно глянуть ошибку?
ошибку чего? [DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, please use `name: ['git', 'zsh', 'git-core']` and remove the loop. а выглядит теперь это так: changed: [25.241.12.3] => (item=[u'git', u'zsh', u'git-core']) То есть, ставятся, например, 30 пакетов и какой из них поставился, ккаой уже был -хз
Vadim
потому что они ставятся одной транзакцией, либо все либо ничего, если фейл
Vadim
а энсибл и не должен следить какие поставились а какие были
Павел
а энсибл и не должен следить какие поставились а какие были
ну вот когда они итемами отдельными - понятно на каком итеме произошел change или error
Egor
ну вот когда они итемами отдельными - понятно на каком итеме произошел change или error
Интересный кейс. По идее - да, раньше это работало, но они теперь хотят чтобы работало одной транзакцией, чтобы было быстрее.
Timur
А для надежности ansible-lint сейчас форсит обязательный ретрай при установке пакетов :)
Womchik
что так же ускоряет
Asgoret
Вопрос: как заставить lineinfile вставлять с отступом, а не с 0 позиции на строке? попробовал через indent, эта жопа 1 строку вставляет в 0 позицию, остальные с отступом
Asgoret
решено
Asgoret
не решилась) все равно нужна помощь))) строка, после которой идет вставка имеет 2 остапа, строка должна уже иметь 4, а встыкается в 0 позицибю