我有一个重要的角色,我希望将其打包到一个集合中,并且我想创建一个调用该角色的插件,而不是执行“include_role”。所以,我正在寻找我的客户能够提出如下内容:
- name: call my plugin
my_plugin:
param1: "mmm"
param2: 42
这将在内部运行一些验证,但最终它将调用整个角色来执行(与仅调用模块相反)。
我发现的所有文档似乎都从插件调用模块,但似乎没有任何东西能够调用角色(或剧本)。有没有办法做到这一点?
我有一个重要的角色,我希望将其打包到一个集合中,并且我想创建一个调用该角色的插件,而不是执行“include_role”。所以,我正在寻找我的客户能够提出如下内容:
- name: call my plugin
my_plugin:
param1: "mmm"
param2: 42
这将在内部运行一些验证,但最终它将调用整个角色来执行(与仅调用模块相反)。
我发现的所有文档似乎都从插件调用模块,但似乎没有任何东西能够调用角色(或剧本)。有没有办法做到这一点?
如果你真的想走这条路,你可以查看include_role
源代码。(这里是https://github.com/ansible/ansible/blob/2cbfd1e350cbe1ca195d33306b5a9628667ddda8/lib/ansible/playbook/role_include.py)。不过,在我看来,它不像普通的pugin。
但是这里有一个更严重的问题:如果你创建这样的东西,它会完全掩盖用户的角色内容。角色不是“python 模块”,角色的隔离非常弱。通过对用户隐藏角色内容(和执行),您基本上可以创建自己的 ansible 版本,其中包含新的和未知的错误和怪癖列表。
如果你想控制代码的执行方式,策略插件可能是一个更合理的地方。您仍然允许用户查看通常的执行工作流程,但您将对事情的执行方式有很大的控制权。
但是编写策略插件非常难。我只知道一个第三方策略插件(mitogen)。