Ansible template模块报Could not find or access template file如何解决
问题根因
Ansible的template模块默认会在Ansible控制节点上查找src参数指定的模板文件,而你的filebeat.j2是下载到远程目标主机上的,所以默认情况下会找不到文件。template模块的remote_src: yes参数用于指定从远程目标主机读取模板,但是这个参数是Ansible 2.8版本才新增的,如果你的Ansible版本低于2.8,该参数会被直接忽略,依然会到控制节点查找文件。
解决步骤
1. 先确认Ansible版本
在控制节点执行ansible --version查看版本:
- 若版本 >= 2.8:检查
remote_src参数的缩进和拼写是否正确,必须和src、dest等参数同级,正确配置示例:
- name: create filebeat.yml file using template template: src: "{{ env_select[env_param].deployment_path }}/filebeat/templates/filebeat.j2" dest: "{{ env_select[env_param].deployment_path }}/filebeat/filebeat-{{ filebeat_semver }}-linux-x86_64/filebeat.yml" mode: '0644' remote_src: yes
可以额外添加验证任务确认远程路径和文件是否正常:
- name: 验证远程模板文件状态 stat: path: "{{ env_select[env_param].deployment_path }}/filebeat/templates/filebeat.j2" register: j2_stat - name: 输出模板文件检查结果 debug: var: j2_stat.stat.exists
- 若版本 < 2.8 或者上述方法不生效,可选择以下两种替代方案:
方案一:将模板拉取到控制节点后再渲染
先通过fetch模块把远程主机上的j2模板拉到控制节点本地临时目录,再用template模块渲染:
- name: 拉取远程模板到控制节点 fetch: src: "{{ env_select[env_param].deployment_path }}/filebeat/templates/filebeat.j2" dest: "/tmp/ansible_templates/{{ inventory_hostname }}/" flat: yes - name: 渲染配置文件并推送到远程 template: src: "/tmp/ansible_templates/{{ inventory_hostname }}/filebeat.j2" dest: "{{ env_select[env_param].deployment_path }}/filebeat/filebeat-{{ filebeat_semver }}-linux-x86_64/filebeat.yml" mode: '0644'
方案二:调整流程直接把模板下载到控制节点(更符合Ansible最佳实践)
修改下载模板的uri任务,指定在控制节点执行下载,后续template直接读取本地模板即可,不需要处理remote_src逻辑:
- name: 下载filebeat.j2文件到控制节点 uri: url: "{{ release_url }}/filebeat.j2" method: GET validate_certs: no force_basic_auth: true return_content: no force: no user: "{{ arti_username }}" password: "{{ arti_pass }}" dest: "/tmp/ansible_templates/filebeat.j2" creates: "/tmp/ansible_templates/filebeat.j2" delegate_to: localhost run_once: true # 多主机执行时只需要下载一次,提升效率 - name: 渲染配置文件 template: src: "/tmp/ansible_templates/filebeat.j2" dest: "{{ env_select[env_param].deployment_path }}/filebeat/filebeat-{{ filebeat_semver }}-linux-x86_64/filebeat.yml" mode: '0644'
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

