ansible - 遍历所有 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 文件动态执行模板渲染和复制到目标?
解决方案
我找到了一个方法。我使用正则表达式使用其相对路径列出模板目录中的所有文件。然后使用 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
推荐阅读
- php - 最新的 Cookie Laravel 上的“反序列化():61 字节偏移量 0 处出错”
- node.js - Puppeteer Chromium 无法浏览
- c# - 退出构造函数时,不可为空的属性必须包含非空值。考虑将属性声明为可为空
- java - 在 XML 对象中附加 XML 标记
- contains - UIPATH - 如果条件是动态的
- javascript - 在 JavaScript 中查找行和列之间的项目
- react-native - 如何在 Android 设备上使用 shadowColor?
- java - maven-jar-plugin 生成带有错误 MANIFEST.MF 的 jar
- python-3.8 - 在 Python 中验证用户输入时出错
- sql - SQL stratascratch facebook 面试题