Поиск строки в файле, используя Ansible регулярное выражение - PullRequest
0 голосов
/ 14 января 2020

У меня есть файл, в котором есть одна или несколько записей, как показано в приведенной ниже команде grep:

grep SSLFile /tmp/httpd.conf
Output:
        SSLFile  /web/certs/mycert7.crt

I wi sh, чтобы извлечь имя файла 2-й столбец из вывода, т.е. "/ web / certs /mycert7.crt "используя ansible для всех записей, которые начинаются с SSLFile с использованием Ansible регулярных выражений.

Ниже приведен любой ansible playbook:

- name: Find file
  lineinfile:
    path: "/tmp/httpd.conf"
    regexp: '^SSLFile .*'
    state: absent
  check_mode: yes
  changed_when: false
  register: getfiles

- debug:
    msg: "{{ item.split()[1] }}"
  with_items:
    - "{{ getfiles.stdout_lines }}"

К сожалению, я не получаю greped строка, а также получил ошибку времени выполнения, как показано ниже:

TASK [Find file] ***************************************
task path: /app/test.yml:895
ok: [10.9.9.34] => {"backup": "", "changed": false, "found": 0, "msg": ""}

TASK [debug] *******************************************************************
task path: 
/app/test.yml:905
fatal: [10.9.9.34]: FAILED! => {"msg": "template error while templating string: unexpected char u'_' at 7. String: {{ getfiles.stdout_lines }}"}

Вот httpd.conf

<VirtualHost *:443>
        <LimitExcept GET POST>
        order deny,allow
        deny from all
        </LimitExcept>
        </Location>
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:RSA+AESGCM:RSA+AES:!SHA:!MD5:!RC4:!3DES
        SSLHonorCipherOrder On
        SSLFile  /tmp/certs/mycert.crt
        SSLKeyFile  /tmp/certs/mycert.key

Я попытался regex ^ SSLFile, и он даже не соответствует строке на https://regex101.com/

Обновление: Попытка регулярного выражения: '\\ sSSLFile. *' Получила совпадение, однако не может распечатать из-за ошибки ниже.

task path: /tmp/test.yml:914
ok: [10.9.9.34] => {"backup": "", "changed": false, "found": 1, "msg": "1 line(s) removed"}

TASK [debug] *******************************************************************
task path: /tmp/test.yml:924
fatal: [10.9.9.34]: FAILED! => {"msg": "template error while templating string: unexpected char u'_' at 7. String: {{ getfiles.stdout_lines }}"}

Подскажите, пожалуйста, в чем проблема с моей пьесой и как я могу заставить ее работать?

1 Ответ

2 голосов
/ 14 января 2020

Можете ли вы попробовать что-то вроде ниже.

- hosts: localhost
  vars:
    input : "{{ lookup('template', '/tmp/httpd.conf') }}"
    target: "{{ input | regex_replace('\\sSSLFile\\s*(.*)', '\\1')}}"

  tasks:
  - debug:
     msg: "{{target }}"

Или вы можете сделать это просто с оболочкой, как показано ниже

  - name: test
    shell: cat /tmp/httpd.conf | grep -v '^#'| grep SSLFile | awk '{print $2}'
    register: op
  - debug:
     msg: "{{op.stdout_lines}}"


...