在regex_replace的替换字符串中使用ansible变量

时间:2019-10-31 23:41:47

标签: ansible

我想通过在files前面加上/auto到每个元素来从_sw_table生成一个新列表。虽然我可以通过在regex_replace中将新字符串显式地引用为map的args来做到这一点,但我想使用变量来实现相同的目的。以下作品:

- 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的过程中使用变量extramap获得相同的结果?

1 个答案:

答案 0 :(得分:1)

您可以在Jinja2中使用字符串连接:

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

请注意我使用的更新后的正则表达式模式。我对您上面的输出有不同的结果,因此需要更新模式。