在 Ansible 中,如何访问回调插件中提供给 playbook 的额外参数?

kum*_*mar 2 python ansible

我正在尝试编写一个回调插件来为每个任务计时。那不是困难的部分。但是我有一系列的 playbook 来运行来提供和配置一个实例。对于序列的每次运行,我想将一个 runID 传递给每个剧本,并且该 runID 在一次运行中是不变的,如下所示:

ansible-playbook -e "runID=seq198837" provision.yml
ansible-playbook -e "runID=seq198837" build.yml
ansible-playbook -e "runID=seq198837" deploy.yml
Run Code Online (Sandbox Code Playgroud)

我正在编写的回调插件必须为插件中的每个任务收集时间信息,用 runID 标记它们并将它们存入日志代理。

我在回调插件中尝试了几个钩子和事件,但无法将 runID 额外参数传递给剧本。有没有办法访问该变量?

Kon*_*rov 6

您可以从playobject 中获取它,并且可以在on_play_start.

像这样:

def v2_playbook_on_play_start(self, play):
    vm = play.get_variable_manager()
    extra_vars = vm.extra_vars
    self.run_id = extra_vars['runID']
Run Code Online (Sandbox Code Playgroud)

然后,当您将结果转储到on_stats(例如)某处时,您可以参考self.run_id访问您的runID额外变量。