Невозможно напечатать переменную с результатами совпадения с регулярным выражением в Ansible - PullRequest
1 голос
/ 15 января 2020

Ниже моя книга воспроизведения, которая ищет строку «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"
}

1 Ответ

1 голос
/ 15 января 2020

Переменная target представляет собой список. Это можно повторить. Задание

    - debug:
        msg: "{{ item.split()[1] }}"
      loop: "{{ target }}"

дает

    "msg": "/web/test1.crt"
    "msg": "/web/SSL.crt"
    "msg": "/web/test.crt"
...