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

时间:2018-08-01 18:53:06

标签: ansible

我正在编写一个自定义的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也没有转换为我的回调插件。看来,滴入我插件的唯一变量是清单文件中定义的变量,还有一些魔术变量。

2 个答案:

答案 0 :(得分:3)

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

如果要访问其他变量,则需要通过剧本的变量管理器:

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

答案 1 :(得分:1)

优秀的@techraf帮助我弄清楚了这一点。我需要捕获Play的变量管理器:

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

    def v2_playbook_on_play_start(self, play):
      self.vm = play.get_variable_manager()

    def v2_runner_on_ok(self, result):
      host_vars = self.vm.get_vars()['hostvars'][result._host.name]
      var_that_i_want = host_vars['var_that_i_want']