Ansible can';在include_任务中使用vars时不运行
我有两个playbooks driver.yaml在从名为main_driver.yml的模板转换后调用另一个play 主剧本驱动程序.ymlAnsible can';在include_任务中使用vars时不运行,ansible,Ansible,我有两个playbooks driver.yaml在从名为main_driver.yml的模板转换后调用另一个play 主剧本驱动程序.yml --- -名称:安装服务 主持人:全部 收集事实:不 vars_文件: -变量输入驱动程序.yaml 任务: -名称:将模板转换为剧本 模板: src:driver.yaml.j2的模板 目的地:主驱动程序yaml 委托给:localhost -名称:运行角色 包括_任务:main_driver.yaml 主驱动程序yaml的内容 --- -名称:安装
---
-名称:安装服务
主持人:全部
收集事实:不
vars_文件:
-变量输入驱动程序.yaml
任务:
-名称:将模板转换为剧本
模板:
src:driver.yaml.j2的模板
目的地:主驱动程序yaml
委托给:localhost
-名称:运行角色
包括_任务:main_driver.yaml
主驱动程序yaml的内容
---
-名称:安装服务
变量:
java_包:java-11-openjdk
dock_版本:18.09.0
-名称:安装服务
包括以下角色:
名称:配置java
接收错误如下:
失败!=>{“原因”:“在任务中未检测到模块/操作。\n\n错误出现在'main_driver.yaml'中:第2行第3列,但可能\n出现在文件的其他位置,具体取决于语法问题。\n\n出现问题的行是:\n\n---\n-name:Setup Services\n^此处\n”}
两件事:
- yaml似乎包括它自己(main_驱动程序)——这可能不起作用
- 与“include_tasks”一起使用的任务文件应该是“纯”任务文件,而不是剧本。换句话说,它不应该包含playbook标题(主机、名称等),而只是一个任务列表
我正在努力理解您示例中的逻辑,可能需要再次检查文件内容是否正确?
vars
不是模块名称,而是任务选项。您应该像这样修复包含的文件:
---
-名称:安装服务
包括以下角色:
名称:配置java
变量:
java_包:java-11-openjdk
dock_版本:18.09.0
另一种可能的方式是:
---
-名称:设置变量
设定事实:
java_包:java-11-openjdk
dock_版本:18.09.0
-名称:安装服务
包括以下角色:
名称:配置java
很抱歉更新了错误的文件,我现在已经更改了它…我发现包含一个由模板制作的任务文件的想法非常奇怪和危险。谢谢!这对be是有效的,但是否可以在顶层声明变量,以便将其应用于任务和其他角色?我的目标是使用模板动态创建实际的剧本,其中包含变量、任务和角色,并最终运行它