动作插件和Ansible模块之间的关系是什么?

2024-05-23 19:01:57 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

目前,我正在尝试开发一个动作插件来调用其他模块来简化和自动化一个任务。(请参阅我的previous question了解更多详细信息)目前,我甚至无法运行插件。我知道我需要一个同名的模块才能正常运行,但是当我有一个同名的空白文件时,它仍然失败。我缺少模块和插件之间的关系?在

其他信息

以防万一,我把我的错误误诊了这里是一些安装信息和插件的示例代码。在

安装

模块存在于~/.ansible/plugins/modules
插件存在于~/.ansible/plugins/action_plugin

示例代码

from ansible.plugins.action import ActionBase

class ActionModule(ActionBase):

    def run(self, tmp=None, task_vars=None):

        result = super(ActionModule, self).run(tmp, task_vars)

        result_modules = {}

        common_args = {}
        common_args['ucs_ip'] = self._task.args.get('ucs_ip')
        common_args['ucs_username'] = self._task.args.get('ucs_username')
        common_args['ucs_password'] = self._task.args.get('ucs_password')

        #Make LS Server
        module_args = common_args.copy()
        module_args['name'] = self._task.args.get('name')
        module_args['other_args'] = self._task.args.get('other_args')
        result_modules['lsServer'] = self._execute_module(module_name='ls_server_module', module_args=module_args, task_vars=task_vars, tmp=tmp)

        root_name = self._task.args.get('org_dn') + '/ls-' + self._task.args.get('name')

        #Make Vnic Ether
        for vnic in self._task.args.get('LAN', {}).get('VNIC'):
            module_args = common_args.copy()
            module_args['name'] = vnic.get('name')
            module_args['other_args'] = vnic.get('other_args')
            module_args['parent'] = root_name
            res['vnic_'+vnic.get('name')] = self._execute_module(module_name='vnic_ether_module', module_args=module_args, task_vars=task_vars, tmp=tmp)

            vnic_name = root_name + "/ether-" + vnic.get('name')

            #Make Vlan with VnicEtherIf
            for vlan in vnic.get('vlans'):
                module_args = common_args.copy()
                module_args['name'] = vlan.get('name')
                module_args['parent'] = vnic_name

Yaml文件

^{pr2}$

Tags: 模块nameself插件taskgetargscommon
2条回答

通常你会有这样的布局:

/path/to/project/playbook.yml
/path/to/project/library/module1.py
/path/to/project/library/module2.py
/path/to/project/library/action1.py
/path/to/project/action_plugins/action1.py

如果不更改默认设置,Ansible将在您的playbook附近的library目录下查找模块,并在action_plugins目录下查找操作插件。伪action1.pylibrary目录中。在

操作插件的正确文件夹是~/.ansible/plugins/action

相关问题 更多 >