Ниже моя книга воспроизведения, которая ищет строку «SSLFile» и сохраняет результаты совпадений в set_fact под названием «target»
- name: Find certificate entries
set_fact:
target: "{{ filecontent.stdout | regex_findall('\\sSSLFile.*') }}"
- debug:
msg: "{{ target }}"
В приведенном выше отладочном выводе показаны три совпавшие строки. Смотрите вывод ниже:
TASK [Find certificate entries] ***************************************
task path: /app/test.yml:908
ok: [10.9.9.11] => {
"ansible_facts": {
"target": [
" SSLFile /web/test1.crt",
" SSLFile /web/SSL.crt",
" SSLFile /web/test.crt"
]
},
"changed": false
}
I wi sh, чтобы получить только имена файлов, т.е. 2-й столбец из переменной "target", т.е.
/web/test1.crt
/web/SSL.crt
/web/test.crt
Я пробовал следующее, но ни одно из них не работает и выдает ошибку:
- name: Print found entries
debug:
msg: "{{ item.split()[1] }}"
with_items: "{{ target.split(',') }}"
Также пробовал следующее:
with_items: "{{ target.results }}"
with_items: "{{ target.stdout_lines }}"
with_items: "{{ target.stdout }}"
Ошибка получена:
TASK [debug] *******************************************************************
task path: /app/test.yml:917
fatal: [10.9.9.11]: FAILED! => {
"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'split'\n\nThe error appears to be in '/app/test.yml': line 917, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^ here\n"
}