我想通过在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
的过程中使用变量extra
和map
获得相同的结果?
答案 0 :(得分:1)
您可以在Jinja2中使用字符串连接:
- set_fact:
my_lst: "{{ files | map('regex_replace', '(^.*$)', top_dir + '\\1' + extra) | list }}"
请注意我使用的更新后的正则表达式模式。我对您上面的输出有不同的结果,因此需要更新模式。