0

我有一个重要的角色,我希望将其打包到一个集合中,并且我想创建一个调用该角色的插件,而不是执行“include_role”。所以,我正在寻找我的客户能够提出如下内容:

- name: call my plugin
  my_plugin:
    param1: "mmm"
    param2: 42

这将在内部运行一些验证,但最终它将调用整个角色来执行(与仅调用模块相反)。

我发现的所有文档似乎都从插件调用模块,但似乎没有任何东西能够调用角色(或剧本)。有没有办法做到这一点?

4

1 回答 1

1

如果你真的想走这条路,你可以查看include_role源代码。(这里是https://github.com/ansible/ansible/blob/2cbfd1e350cbe1ca195d33306b5a9628667ddda8/lib/ansible/playbook/role_include.py)。不过,在我看来,它不像普通的pugin。

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

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

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

于 2021-05-06T08:40:00.673 回答