You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Ansible Role中解析模板文件至role_path而非远程主机?

Ansible模板生成到角色路径而非远程主机的可行性

你当前的问题核心是:默认ansible.builtin.template模块是在远程主机上执行文件生成操作,而你指定的role_path是控制节点(Ansible运行所在机器)上的路径,远程主机自然不存在这个目录,所以报错。要实现你的需求是完全可行的,只需调整任务执行的目标节点,并确保目标目录存在。

修改后的任务代码

---
- name: Ensure target directory exists on control node
  ansible.builtin.file:
    path: "{{ role_path }}/{{ stack_name | mandatory }}"
    state: directory
  delegate_to: localhost
  run_once: true

- name: Generate configuration.yml in role path on control node
  ansible.builtin.template:
    src: configuration.j2
    dest: "{{ role_path }}/{{ stack_name | mandatory }}/configuration.yml"
  vars:
    stack_env: "dev"
    app_network: "my_network"
  delegate_to: localhost
  run_once: true

- name: Run tasks/main.yml from compose role
  ansible.builtin.include_role:
    name: compose
  vars:
    stack_name: "logging"
    stack_path: "{{ ansible_base_path }}/"

关键调整说明

  • delegate_to: localhost:强制任务在控制节点(而非远程主机)执行,这样role_path指向的控制节点本地角色路径才会生效
  • 先创建目标目录:用file模块提前生成{{ role_path }}/{{ stack_name }}目录,避免模板生成时因目录不存在报错
  • run_once: true:如果是批量管理多台远程主机,这个参数可以避免重复在控制节点生成多次相同文件

后续的compose角色如果需要读取这个生成的文件,也要确保相关任务是在控制节点执行的(同样可以用delegate_to: localhost),否则如果compose角色的任务在远程主机执行,还是会找不到控制节点上的文件。

内容的提问来源于stack exchange,提问作者user2888055

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:50:50