es]x
подскажите, при возврате пустого значения json возвращает [] а таск считает что значение есть, как можно это обойти?
Timur
однократно
Считать файл в переменную, а потом просто проверять стандартно: when: 'mystring in textfile'
Anonymous
👍
можно еще: "проверка | length > 0"
Alex
у меня там регулярка
Timur
проверкой != []
Только не так, а через myjson | length например
Anonymous
проверкой != []
на такое линт ругается
Timur
у меня там регулярка
Можно через lineinfile в check_mode
Timur
на такое линт ругается
И правильно делает
Anonymous
ансибл линт обычно по делу "ругается"
Alex
Можно через lineinfile в check_mode
так оно всегда выдает line replaced. Я так понимаю из-за этого If the regular expression is not matched, the line will be added to the file in keeping with insertbefore or insertafter settings.
Timur
Если таск changed, значит строки нет
Timur
Если ok - строка есть
Alex
он всегда changed: true
Timur
Нет
Alex
- name: Validate console.log become: yes lineinfile: path: "{{ jfmc_product_home }}/var/log/console.log" state: present regexp: '\[XXX(\s)?]' line: 'TBD' owner: root group: root mode: '0644' register: jfrpg_result ignore_errors: yes check_mode: yes XXX не существующая строка, получаю changed: true
Timur
Ну, или как я говорил выше. Считывать в переменную, а потом фильтр regex_search
Alex
для существующей строки аналогично
Timur
Значит неправильное условие
Timur
Попробуйте через regex_search
Alex
а как тогда в цикле сделать? - name: Test debug: msg: '{{ jfmc_console_log is regex("\[XXX(\s)?]") }}' loop: "{{ jfmc_services_code_name }}" не получается вместо XXX подставить item
Alex
в результате решилось так - name: Test debug: msg: "{{ jfmc_console_log is regex('\\[' + item + '(\\s)?]') }}" loop: "{{ jfmc_services_code_name }}"
es]x
а как код синим вставлять?
Alex
код синим?
Anonymous
а как код синим вставлять?
ПКМ - формат - моноширный
Egor
ребят, вопрос, как реализовать схему: есть таск shell с with_items
Egor
надо для каждого обрабатывать результат и если там есть нужное - вписывать в переменную
Egor
отсюда вопрос, как можно комбинировать register и with_items с when
Egor
точнее можно ли сделать нечно shell: <comand> set_fact: var=item.name when: 'error' in stdout with_items: {{ list }}
Alex
так shell или set_fact?
Egor
так в том и вопрос
Egor
мне надо дёрнуть команду по шеллу, в цикле с разным пейлоадом
Egor
и в зависимости от отверта собрать лист
Egor
и потом с этим листом уже работать
Egor
вот и думаю, как это сделать
Egor
типа понимаю, что можно нарегистрировать все стдаут от всех запросов, потом отдельным циклом их обработат и тогда уже собрать массив
Egor
но это монструозно немного, как по мне
Egor
вот и спрашиваю, нельзя ли это вглубь одной таски засунуть
Egor
без вызова внешнего скрипта/кода на баше
Timur
А то непонятно для чего нужен такой лютый башсибл
Egor
есть список апишек, которые разворачиваются, надо постучать в них, найти незапущенные и отправить им рестарт
Egor
ну потому, что в них стучать надо консольной командой
Timur
Какой?
Egor
хз, зовётся client
Timur
Там rest api?
Egor
если бы
Egor
там вообще не http апи
Egor
проприетарщина какая-то
Egor
точнее даже не так, говнописарщина какая-то :-)
Timur
Как у вас с питоном?
Egor
и пока её не перепишут, это надо как-то разворачивать
Egor
хорошо с питоном, но выше же был вопрос, можно ли это обвязать внутри ансибла без написания внешнего скрипта
Egor
просто если можно и не шибко монструозно, то я бы не хотел писать скрипт
Timur
И работать также
Egor
пичалька
Timur
Ну, если не хочется модуль писать, то вариант один
Timur
В цикле вызываем модуль command (не шелл) с нужной командой, результат сохраняем в register
Timur
Можно делать это в цикле
Timur
Потом отдельным циклом можно пройтись по полученным данным из переменной предыдущего таска и там уже свою логику применять
Egor
угу, это я уже выше описывал
Egor
а почему комманд а не шелл?
Egor
чисто поэкономить ресурсы, чтоб енв не выдёргивать?
Timur
а почему комманд а не шелл?
Не нужно вызывать шелл без необходимости
Egor
ну я, окровенно, не в курсе, разницы, как по мне, результат один и тот же
Egor
у обеих
Timur
У command более предсказуемое поведение при прочих равных. Shell нужен только если у вас там обязательно какая-нибудь дичь вроде пайпа или перенаправления вывода
Egor
It is almost exactly like the command module but runs the command through a shell (/bin/sh) on the remote node.
Egor
тащемта даже дока говорит, что разницы нет, кроме того, что шелл оборачивается в sh
Timur
command не поддерживает пайпы и прочие навороты баша
Egor
ну потому, что она вызывается как exec из питона, а шелл, как exec sh и потом команда
Timur
И оттуда легче вывод корректный получить