You need to enable JavaScript to run this app. Ansible 2.9 角色目录中files与templates目录的区别及files目录使用方法
优惠活动
大模型
产品
解决方案
定价
更多

Ansible 2.9 角色目录中files与templates目录的区别及files目录使用方法

Ansible 2.9 角色结构中 files 与 templates 目录的区别及 files 目录使用指南

核心差异对比

两者都是角色内部用于存放控制端本地资源的目录,但定位、调用规则、适用场景完全不同:

  • 资源处理逻辑不同
    • files 目录:存放无动态渲染需求的静态资源,角色执行时会直接读取文件原始内容传输到目标主机,全程不做任何内容解析、变量替换。
    • templates 目录:存放支持 Jinja2 语法的动态模板文件,执行时会先经过模板引擎完成变量替换、逻辑渲染,生成最终内容后再传输到目标主机。
  • 模块调用规则不同
    • files 目录下的资源,可被 copy、script 等支持本地文件拉取的模块自动寻址,调用时直接填写资源文件名即可,无需写完整相对路径。
    • templates 目录下的资源,必须使用 template 模块调用,若误用 copy 模块,文件内的 Jinja2 语法会被原样传输到目标主机,不会被解析生效。
  • 适用场景不同
    • 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.sh
    
    示例中 env_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 03:06:05