Plugins ansible插件可以调用角色或剧本吗?

Plugins ansible插件可以调用角色或剧本吗?,plugins,ansible,ansible-role,ansible-collections,Plugins,Ansible,Ansible Role,Ansible Collections,我有一个很大的角色,我想把它打包在一个集合中,我想创建一个插件来调用这个角色,而不是执行“include_role”。因此,我希望我的客户能够: - name: call my plugin my_plugin: param1: "mmm" param2: 42 这将在内部运行一些验证,但最终它将调用整个角色来执行(与只调用模块相反) 我找到的所有文档似乎都是从插件调用模块,但似乎没有任何东西能够调用角色(或剧本)。有什么方法可以做到这一点吗?如果你真的

我有一个很大的角色,我想把它打包在一个集合中,我想创建一个插件来调用这个角色,而不是执行“include_role”。因此,我希望我的客户能够:

- name: call my plugin
  my_plugin:
    param1: "mmm"
    param2: 42
这将在内部运行一些验证,但最终它将调用整个角色来执行(与只调用模块相反)


我找到的所有文档似乎都是从插件调用模块,但似乎没有任何东西能够调用角色(或剧本)。有什么方法可以做到这一点吗?

如果你真的想这样做,你可以查看
包含角色的源代码。(这里是f.e.)。不过,在我看来,这不像是普通的呕吐物

但是这里有一个更严重的问题:如果你创建这样的东西,它将完全模糊用户的角色内容。角色不是“python模块”,角色的隔离性非常弱。通过向用户隐藏角色内容(和执行),您基本上创建了您自己的ansible版本,其中包含了新的未知bug和怪癖列表

如果您想控制代码的执行方式,策略插件可能是一个更合理的地方。您仍然允许用户查看通常的执行工作流,但您可以对执行方式进行大量控制


但是编写策略插件是非常困难的。我只知道一个第三方策略插件(mitogen)。

你很可能是对的。上下文是我正在使用一个集合作为分发机制,其中有一个主角色和一些可选的辅助角色,我希望让用户通过任务参数进行控制。我想这不是办法,模块也不是。如果有其他想法,我们将不胜感激……同时尝试分发剧本。您不能使用ansible发布box产品(因为库存和角色/角色之间通过变量存在很多连接),但通常使用playbook(或playbook示例)发布一组角色。尝试研究ceph ansible和kubespray项目,以获得灵感和想法。