我想编写一个动作插件(特别是'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'参数名义上包括我需要的所有信息,但我也预见到能够记录任务名称的好处):
答案 0 :(得分:0)
我认为 Custom Ansible Callback not receiving group_vars/host_vars 下提供的解决方案正是您要寻找的。p>
基本上,您需要按如下方式访问播放变量管理器:
def v2_playbook_on_play_start(self, play):
variable_manager = play.get_variable_manager()
hostvars = variable_manager.get_vars()['hostvars']