ansible - 在 regex_replace 的替换字符串中使用 ansible 变量
问题描述
我想files
通过前置/auto
和附加_sw_table
到每个元素来生成一个新列表。虽然我可以通过在 in 中明确提及新字符串作为 args 来做到这一点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
获得相同的结果?
解决方案
您可以在 Jinja2 中使用字符串连接:
- set_fact:
my_lst: "{{ files | map('regex_replace', '(^.*$)', top_dir + '\\1' + extra) | list }}"
请注意我使用的更新的正则表达式模式。我对您上面的输出有不同的结果,需要更新模式。
推荐阅读
- php - .json 文件一直为空
- sas - 使用 Proc Transpose 时如何防止变量名的前导下划线
- javascript - 如何在 javascript 中使用另一个文件中的变量和函数?
- docker - Docker:如何通过存储一些登录凭据来创建映像
- r - 为满足 R 中的一个条件的条目创建具有特定值的新列
- php - 在使用 php 接收到 MySQL 结果之后,如何将它们按类型分组,但在编码为 json 之前?
- performance - 用左连接删除
- spring-boot - 无法在 Gradle 5.x 中使用 bootRun addresources=true
- python - 从 for 循环返回的具有相同索引的 Concat 数据帧
- html - 如果页面超出正常高度,页脚浮动