如何访问动作插件内的ansible变量(不提供它们作为参数)

时间:2018-11-21 12:12:11

标签: ansible ansible-2.x

我想编写一个动作插件(特别是'assert'的变体),该插件将调用该动作插件的角色记录到文件不包含的文件中,包括角色名称作为该插件的参数。

我可以看到(每this question)“ {{role_name}}”是一个定义明确的变量。但是我不知道如何在Python中访问它。

我不想做:

- name: example asset
  custom_assert:
     that: 1 > 0
     msg: "Basic maths has broken"
     role: "{{role_name}}"

我已经尝试了以下方法(基于电子邮件交换here

from ansible.inventory.manager import InventoryManager
from ansible import constants as C
inventory = InventoryManager(self._loader, C.DEFAULT_HOST_LIST)
return inventory.get_host(self._connection.host).vars

但是,我可以访问的所有内容都在我的主机文件中设置了一些变量-而不是使用“寄存器”或“设置”设置的变量的全部范围,或者由于其他原因(例如role_name)而被ansible知道的变量。

(此外,我也想访问任务名称-尽管'that'和'msg'参数名义上包括我需要的所有信息,但我也预见到能够记录任务名称的好处):

1 个答案:

答案 0 :(得分:0)

我认为 Custom Ansible Callback not receiving group_vars/host_vars 下提供的解决方案正是您要寻找的。

基本上,您需要按如下方式访问播放变量管理器:

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