我想创建一个 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。