如何在 ansible 回调插件中拥有状态



我想创建一个 ansible 回调插件,将敏感数据隐藏在 ansible 输出中。这里有一个关于如何做的建议:

from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
import os, collections
class CallbackModule(CallbackModule_default):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'stdout'
    CALLBACK_NAME = 'protect_data'
    def __init__(self, display=None):
        super(CallbackModule, self).__init__(display)
    def hide_password(self, result):
        ret = {}
        for key, value in result.iteritems():
            if isinstance(value, collections.Mapping):
                ret[key] = self.hide_password(value)
            else:
                if "password" in key:
                    ret[key] = "********"
                else:
                    ret[key] = value
        return ret
    def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
        return super(CallbackModule, self)._dump_results(self.hide_password(result), indent, sort_keys, keep_invocation)

现在这个例子隐藏了"密码"。我现在想让隐藏的单词在剧本运行时可配置。

我可以以某种方式给插件一个状态(要隐藏的单词列表(并在剧本运行时对其进行修改吗?

您可以在__init__内部将self.words_list设置为某个默认值。
然后在...on_task_start...on_handler_task_start内部检查一些特定的变量并相应地修改您的self.words_list

您可以查看如何在回调插件中使用持久属性来收集统计信息profile_tasks。

相关内容

最新更新