我有一个控制 Playbook,它会在运行时从 API 获取组数据。基于这些组,我想动态地将 Play 添加到运行中(使用不同的主机和变量)。
据我了解,“include”模块就是用来干这个的。但是文档说它已经被弃用了。所以现在我想知道:有什么面向未来的方法可以在运行时动态添加 Play?
“include_tasks” 不起作用,因为包含的任务属于同一个 Play,因此将使用相同的 Hosts。
我有一个控制 Playbook,它会在运行时从 API 获取组数据。基于这些组,我想动态地将 Play 添加到运行中(使用不同的主机和变量)。
据我了解,“include”模块就是用来干这个的。但是文档说它已经被弃用了。所以现在我想知道:有什么面向未来的方法可以在运行时动态添加 Play?
“include_tasks” 不起作用,因为包含的任务属于同一个 Play,因此将使用相同的 Hosts。
无法包含剧本。只能导入。请参阅ansible.builtin.import_playbook。
无法动态导入任何内容。必须在执行开始前导入导入对象(任务、角色、剧本)。请参阅重用 Ansible 工件。
Ansible Runner可用于动态运行剧本。
问:“剧本在运行之前确实存在。”
答:剧本必须在运行前存在。
问:“控制剧本必须决定在运行时包含哪一个。”
答:还是一样,
It is not possible to include a playbook. There is only the import available.
“控制”(顶层)剧本除了控制一个可选when
条件外,什么都不控制。例如,摘录概要:
官方文档的措辞具有误导性。没有
include
。问:“使用包含模块可以实现这一点。”
答:不行。include 模块无法实现。必须导入
at the top level
剧本。You cannot use this action inside a play.
概括: