ansible角色中模板文件必须存于templates/目录、静态文件必须存于files/目录:template模块自动查找.j2模板并渲染,copy模块直接读取files中原始文件,路径须省略目录前缀,不可混放或写绝对路径。

在 Ansible 角色(Role)中,模板文件和静态文件有明确的存放位置和使用规范,不是随便放哪都能被正确调用的。
templates/ 目录专用于 Jinja2 模板文件
所有以 .j2 结尾的模板文件(如 nginx.conf.j2、myapp.yml.j2)必须放在角色根目录下的 templates/ 子目录中。Ansible 的 template 模块会自动从此处查找,无需写完整路径。
- 调用时只需写文件名,例如:
src: nginx.conf.j2 - 支持变量渲染、条件判断、循环等 Jinja2 语法
- 不能放二进制文件或纯文本配置(非模板类),否则无法发挥模板优势
files/ 目录专用于静态文件
需要原样复制到目标主机的文件——比如预编译的二进制包、证书(cert.pem、key.pem)、shell 脚本、配置备份等——统一放进 files/ 目录。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
copy或script模块默认从此目录读取src路径 - 示例:
src: app-v2.4.1.tar.gz表示从角色files/app-v2.4.1.tar.gz复制 - 不经过任何内容处理,保持原始字节一致
注意路径解析逻辑
Ansible 在执行角色任务时,会按固定顺序查找资源:
- 先在当前角色的
templates/中找template模块指定的.j2文件 - 再在当前角色的
files/中找copy模块指定的普通文件 - 不会跨角色搜索,也不会去
playbook所在目录下找 - 若路径写成绝对路径(如
/tmp/config.j2),则跳过角色内查找机制
常见错误提醒
容易出错的地方集中在命名和路径上:
- 把
.j2文件误放到files/下,template模块找不到 - 在
tasks/main.yml中写src: templates/nginx.conf.j2——多写了templates/前缀,实际应直接写nginx.conf.j2 - 在
files/中放了带变量的配置却用copy而非template,导致无法动态替换










