Ansible can';在include_任务中使用vars时不运行

Ansible 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的内容 --- -名称:安装

我有两个playbooks driver.yaml在从名为main_driver.yml的模板转换后调用另一个play

主剧本驱动程序.yml

---
-名称:安装服务
主持人:全部
收集事实:不
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是有效的,但是否可以在顶层声明变量,以便将其应用于任务和其他角色?我的目标是使用模板动态创建实际的剧本,其中包含变量、任务和角色,并最终运行它