Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问action插件中的ansible变量(不作为参数提供)_Ansible_Ansible 2.x - Fatal编程技术网

如何访问action插件中的ansible变量(不作为参数提供)

如何访问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}}" 我尝试了以下方法(基于电子邮

我想编写一个动作插件(特别是“assert”的变体),它记录调用动作插件的角色的文件,而不将角色名作为插件的参数

我可以看出,{{role\u name}}是一个定义良好的变量。但我不知道如何在Python中访问它

我不想做:

- 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']