首页 > 解决方案 > 遍历所有 Jinja 模板文件并复制到目标目录

问题描述

我在 Ansible 中参数化的模板目录中有一组 .jinja2 模板。

└── roles
    ├── copyFiles
    │   ├── tasks
    │   │   └── main.yml
    │   └── templates
    │       ├── file.one.name.xml.jinja2
    │       ├── file.two.name.xml.jinja2
    │       ├── file.three.name.xml.jinja2
    |       ...

我想将文件复制到目标目录。但是,我不想在 with_items 字典中指定每个单独的 Jinja 模板,如下所示。

---
  - name: Copy the Configuration templates
    template:
      src: "templates/{{ item.src }}"
      dest: "target/{{ item.dest }}"
      owner: "{{ user}}"
      group: "{{ group }}"
      mode: 0644
    with_items:
      - { src: 'file.one.name.xml.jinja2', dest: 'file.one.name.xml' }
      - { src: 'file.two.name.xml.jinja2', dest: 'file.two.name.xml' }
      - { src: 'file.three.name.xml.jinja2', dest: 'file.three.name.xml' }
      ...

有没有办法为模板目录中的任何 .jinja2 文件动态执行模板渲染和复制到目标?

标签: ansiblejinja2

解决方案


我找到了一个方法。我使用正则表达式使用其相对路径列出模板目录中的所有文件。然后使用 regex_replace 构造将用于目标文件的新名称:

---
  - name: Copy the Configuration templates
    template:
      src:  "{{ item }}"
      dest: "target/{{ item | basename | regex_replace('\.jinja2','') }}"
      owner: "{{ user}}"
      group: "{{ group }}"
      mode: 0644
    with_fileglob:
       - ../templates/*.jinja2

推荐阅读