es]x
подскажите, при возврате пустого значения json возвращает [] а таск считает что значение есть, как можно это обойти?
Egor
es]x
Timur
однократно
Считать файл в переменную, а потом просто проверять стандартно:
when: 'mystring in textfile'
Anonymous
👍
можно еще: "проверка | length > 0"
Alex
у меня там регулярка
Alex
Timur
Anonymous
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
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
Timur
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
код синим?
es]x
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
Timur
А то непонятно для чего нужен такой лютый башсибл
Egor
есть список апишек, которые разворачиваются, надо постучать в них, найти незапущенные и отправить им рестарт
Timur
Egor
ну потому, что в них стучать надо консольной командой
Timur
Какой?
Egor
хз, зовётся client
Timur
Там rest api?
Egor
если бы
Egor
там вообще не http апи
Egor
проприетарщина какая-то
Egor
точнее даже не так, говнописарщина какая-то :-)
Timur
Как у вас с питоном?
Egor
и пока её не перепишут, это надо как-то разворачивать
Egor
хорошо с питоном, но выше же был вопрос, можно ли это обвязать внутри ансибла без написания внешнего скрипта
Egor
просто если можно и не шибко монструозно, то я бы не хотел писать скрипт
Timur
Timur
И работать также
Egor
пичалька
Timur
Ну, если не хочется модуль писать, то вариант один
Timur
В цикле вызываем модуль command (не шелл) с нужной командой, результат сохраняем в register
Timur
Можно делать это в цикле
Timur
Потом отдельным циклом можно пройтись по полученным данным из переменной предыдущего таска и там уже свою логику применять
Egor
угу, это я уже выше описывал
Egor
а почему комманд а не шелл?
Egor
чисто поэкономить ресурсы, чтоб енв не выдёргивать?
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
И оттуда легче вывод корректный получить