能否在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
相关产品推荐
相关产品推荐

