использование regex_findall для фильтрации вывода - PullRequest
0 голосов
/ 04 февраля 2019

Я использую regex find_all для фильтрации выходных данных сетевой команды, я протестировал регулярное выражение с выходными данными, используя regex101, и я уверен, что это правильно, вывод также является ожидаемым, но когда я пытаюсь фильтровать, я думаю, что этоне совпадают в пьесе.В результате я всегда получаю пустое сообщение.

- name: extract env
 lineinfile:                                 
   line: "{{ env.stdout[0] }}"
   dest: "{{ output_path }}/env_of_{{inventory_hostname}}.csv"
   create: True
-  debug:
   msg: "{{ env.stdout[0] | regex_findall('^.*one minute: (\\d+%); five.*$') }}"

Вывод должен быть числом в процентах, но вот что я получаю:

TASK [debug] ********************************************************************************************************
task path: /ansible/testcsv.yml:60
ok: [R1] => {
"msg": []
 }
ok: [R2] => {
"msg": []
 }
ok: [R3] => {
"msg": []
 }

1 Ответ

0 голосов
/ 04 февраля 2019

Regex 'использует обратную косую черту, как и YAML, когда вы используете скаляры с двойными кавычками, как и вы.Это требует проблем и нечитаемости.

Вам нужно либо удвоить, либо уменьшить обратную косую черту в вашем значении для msg, использовать одинарные кавычки (в пределах которых только одинарные кавычки могут и должны быть исключены путем удвоения их), или, и этоЛучшее решение на сегодняшний день - использовать буквальный скаляр в стиле блоков YAML (с соответствующим сжатием):

- name: extract env
 lineinfile:                                 
   line: |-
     {{ env.stdout[0] }}
   dest: |-
      {{ output_path }}/env_of_{{inventory_hostname}}.csv
   create: True
-  debug:
   msg: |-
      {{ env.stdout[0] | regex_findall('^.*one minute: (\\d+%); five.*$') }}
...