如何从Ansible操作插件返回差异数据

时间:2019-05-27 18:13:09

标签: python ansible

我正在编写一个作为动作插件实现的Ansible模块,类似于Ansible核心提供的Template模块和插件。我想用模块之前和之后的行返回差异数据。我可以找到一些示例,说明如何从实际模块返回此数据,但是我一直在尝试推断如何将相同信息与动作插件的返回相关联。

lineinfile模块中,diff数据作为对module.exit_json()的调用中的diff关键字参数返回,如下所示:

module.exit_json(changed=changed, msg=msg, backup=backupdest, diff=difflist)

但是,似乎没有插件曾经调用过exit_json(),也没有办法调用它们,因为它们没有module数据结构可以使用。

exit_json()上的module方法似乎是在line 2042 of module_utils/basic.py上定义的,它依次在line 2007上调用了self._return_formatted(),似乎在回显{{ 1}}(经过一些清理)到kwargs。这样。 。 。只需在现有的stdout结构中添加一个diff关键字?我会玩的。

1 个答案:

答案 0 :(得分:1)

是的,向插件返回的现有diff字典添加一个result关键字和值似乎就足够了。这是一个不完整的简约示例:

class ActionModule(ActionBase):
    def run(self, tmp=None, task_vars=None):

        diff = {'before': 'old data\n',
                'after': 'new data\n'}

        result['diff'] = diff
        result['changed'] = True

        return result