ansible - 自定义 Ansible 回调未接收 group_vars/host_vars

标签 ansible callback

我正在编写一个自定义的 ansible 回调:

class CallbackModule(CallbackBase):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'aggregate'
    CALLBACK_NAME = 'my_callback'

    def v2_runner_on_ok(self, result):
        print("v2_runner_on_ok")
        import pdb; pdb.set_trace()
        result._host.groups[0].get_vars()

当我检查 result._host.groups[0].get_vars() 的内容时,它返回 {},这不是我所期望的。我已经验证主机正在接收group_vars(通过在我的剧本中放置debug任务并打印出预期的var)。所以我的问题是,为什么回调没有收到主机的 group_vars

另一个同样奇怪的地方是,host_vars 也没有转换到我的回调插件。似乎唯一流入我的插件的变量是 list 文件中定义的变量,以及一些神奇的变量。

最佳答案

您正在访问 ansible.inventory 类下的变量,因此您只能获得 list 中定义的变量。

如果你想访问其他变量,你需要通过play的变量管理器:

def v2_playbook_on_play_start(self, play):
    variable_manager = play.get_variable_manager()
    hostvars = variable_manager.get_vars()['hostvars']

关于ansible - 自定义 Ansible 回调未接收 group_vars/host_vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51640444/

相关文章:

ssl - kolla-ansible TLS 部署失败

javascript - 如何将现有回调 API 转换为 Promise?

Qt 复选框 stateChanged 事件处理程序

ios - 如何将函数参数从 Objective-C 转换为 Swift?

javascript - 如何实现超快的 ASP.NET AJAX 回调/PageMethods

ansible - 如果是组成员,如何跳过 Ansible 主机

python - 使用 ansible 从源代码安装 python 包

docker - 如何使用 Docker-compose 编写 Ansible 剧本

linux - 如何设置远程主机的环境变量

javascript - 当作为参数传递时,对象方法回调会丢失其在事件处理程序中的绑定(bind),但在硬编码时不会