如何访问action插件中的ansible变量(不作为参数提供)
我想编写一个动作插件(特别是“assert”的变体),它记录调用动作插件的角色的文件,而不将角色名作为插件的参数 我可以看出,{{role\u name}}是一个定义良好的变量。但我不知道如何在Python中访问它 我不想做:如何访问action插件中的ansible变量(不作为参数提供),ansible,ansible-2.x,Ansible,Ansible 2.x,我想编写一个动作插件(特别是“assert”的变体),它记录调用动作插件的角色的文件,而不将角色名作为插件的参数 我可以看出,{{role\u name}}是一个定义良好的变量。但我不知道如何在Python中访问它 我不想做: - name: example asset custom_assert: that: 1 > 0 msg: "Basic maths has broken" role: "{{role_name}}" 我尝试了以下方法(基于电子邮
- name: example asset
custom_assert:
that: 1 > 0
msg: "Basic maths has broken"
role: "{{role_name}}"
我尝试了以下方法(基于电子邮件交换)
但是我可以通过hosts文件访问的只是一些变量集,而不是使用“register”或“setup”设置的全部变量集,也不是ansible因其他原因(如role_name)而知道的全部变量集
(此外,我还想访问任务名称-虽然'that'和'msg'参数名义上包括我需要的所有信息,但我认为能够记录任务名称也会带来好处):我认为下面提供的解决方案正是您需要的 基本上,您需要访问play variable manager,如下所示:
def v2_playbook_on_play_start(self, play):
variable_manager = play.get_variable_manager()
hostvars = variable_manager.get_vars()['hostvars']
我已经找到了解决这个问题的方法-在
str(self.\u task)
上的一些字符串操作会给我角色名,但这是a)clunky和b)没有解释如何访问其他变量。
def v2_playbook_on_play_start(self, play):
variable_manager = play.get_variable_manager()
hostvars = variable_manager.get_vars()['hostvars']