使用多个变量分割文件名

时间:2019-08-30 20:21:15

标签: ansible

我们有一些以环境扩展名结尾的配置文件(例如,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格式问题,我尝试了各种排列,但很困惑

1 个答案:

答案 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' }}"