我们有一些以环境扩展名结尾的配置文件(例如,app.properties.prod,app.properties.dev,db.prod,db.dev等)。我正在传递Ansible一个名为environment = prod的变量,目的是仅从filerepo中提取以.prod扩展名结尾的文件,然后需要从文件名中删除该后缀,以使其最终成为app.properties
类似这样的东西会找到正确的文件:
(env = prod)
copy:
src: "{{item}}"
dest: /app/homedir
with_fileglob:
- /go/to/my/repo/*{{env}}
这会将正确的文件复制到我的/app/homedir
但是,尝试删除env
文件扩展名不起作用
copy:
src: "{{dropsuffix}}"
dest: "{{dropsuffix.split('.{{env}}')[0] }}"
with_fileglob:
-/app/homedir/*.{{env}}
loop_control:
loop_var: dropsuffix
但是删除{{env}}
并仅添加文本“ prod”将起作用
dest: "{{dropsuffix.split('.prod')[0] }}"
我假设其中存在嵌套变量的jinja格式问题,我尝试了各种排列,但很困惑
答案 0 :(得分:0)
可以使用regex_replace过滤器删除扩展名。
- copy:
src: "{{ item }}"
dest: "/app/homedir/{{ item|basename|regex_replace(regex, replace) }}"
loop: "{{ lookup('fileglob', '/go/to/my/repo/*.' ~ env, wantlist=True) }}"
vars:
regex: "{{ '^(.*)\\.' ~ env ~ '$' }}"
replace: "{{ '\\1' }}"