我正在编写一个作为动作插件实现的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
关键字?我会玩的。
答案 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