Используйте переменную ansible в строке замены для regex_replace - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу создать новый список из files, добавив /auto и добавив _sw_table к каждому элементу. Хотя я могу сделать это, явно указав новые строки в качестве аргументов regex_replace в map, я хочу добиться того же, используя переменные. Работает следующее:

- hosts: localhost
  gather_facts: no
  tasks:
  - set_fact:
      my_lst: []
      top_dir: /auto
      extra: sw_table
      files: ['/etc/passwd', '/etc/group']

  - set_fact:
      my_lst: "{{ files | map('regex_replace', '(.*)', '/auto\\1_sw_table') | list }}"

  - debug: var=my_lst

Вывод:

$ ansible-playbook -i localhost, ./test.yaml 

PLAY [localhost] **************************************************************************************************

TASK [set_fact] ***************************************************************************************************
ok: [localhost]

TASK [set_fact] ***************************************************************************************************
ok: [localhost]

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "my_lst": [
        "/auto/etc/passwd_sw_table", 
        "/auto/etc/group_sw_table"
    ]
}

Как использовать переменные top_dir и extra при вызове map для получения того же результата?

1 Ответ

1 голос
/ 01 ноября 2019

Вы можете использовать конкатенацию строк в Jinja2:

  - set_fact:
      my_lst: "{{ files | map('regex_replace', '(^.*$)', top_dir + '\\1' + extra) | list }}"

Обратите внимание на обновленный шаблон регулярных выражений, который я использовал. Я получил результаты, отличные от приведенных выше, и мне нужно было обновить шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...