Ansible 2.9 角色目录中files与templates目录的区别及files目录使用方法
Ansible 2.9 角色结构中 files 与 templates 目录的区别及 files 目录使用指南
核心差异对比
两者都是角色内部用于存放控制端本地资源的目录,但定位、调用规则、适用场景完全不同:
- 资源处理逻辑不同
- files 目录:存放无动态渲染需求的静态资源,角色执行时会直接读取文件原始内容传输到目标主机,全程不做任何内容解析、变量替换。
- templates 目录:存放支持 Jinja2 语法的动态模板文件,执行时会先经过模板引擎完成变量替换、逻辑渲染,生成最终内容后再传输到目标主机。
- 模块调用规则不同
- files 目录下的资源,可被
copy、script等支持本地文件拉取的模块自动寻址,调用时直接填写资源文件名即可,无需写完整相对路径。 - templates 目录下的资源,必须使用
template模块调用,若误用copy模块,文件内的 Jinja2 语法会被原样传输到目标主机,不会被解析生效。
- files 目录下的资源,可被
- 适用场景不同
- files 目录适合存放二进制安装包、内容固定无调整需求的配置文件、无需修改的脚本、证书类静态文件。
- templates 目录适合存放需要根据主机属性、变量值动态生成内容的配置文件,例如带环境参数的服务配置、内核参数配置等。
files 目录的实际使用方法
自动寻址规则
Ansible 2.9 版本中,在角色定义的任务里执行文件拉取操作时,模块会优先在当前角色的 files/ 子目录下匹配目标资源,匹配逻辑为:
- 直接填写文件名的情况:自动匹配
当前角色根目录/files/目标文件名 - 填写带子目录路径的情况:自动匹配
当前角色根目录/files/子目录路径/目标文件名
路径注意:不要在 src 参数中手动追加
files/前缀,否则会出现路径重复拼接导致的文件找不到问题。
常见使用场景示例
- 传输静态固定配置文件
示例中- name: 下发固定内容的系统 hosts 配置 copy: src: static_hosts.conf dest: /etc/hosts owner: root mode: '0644'static_hosts.conf直接存放在角色的files/目录下即可被自动识别。 - 执行本地静态脚本
示例中- name: 运行环境合规检查脚本 script: env_check.shenv_check.sh存放在files/目录下,script模块会自动将脚本上传到目标主机的临时路径,执行完成后自动删除临时文件。 - 调用嵌套子目录的资源
如果在 files 目录下建立了分类子目录,例如files/packages/nginx-1.20.1.rpm,调用时直接填写相对 files 的路径即可:- name: 安装本地缓存的 nginx 安装包 yum: name: packages/nginx-1.20.1.rpm state: present
内容的提问来源于stack exchange,提问作者CH06
相关产品推荐
相关产品推荐

