Ansible 如何通过调用java类跨所有角色动态设置变量

Ansible 如何通过调用java类跨所有角色动态设置变量,ansible,Ansible,我想根据java类的输出为dictionary分配一个值。我正在使用shell模块调用java类。我尝试在vars/main.yml中编写任务,但ansible不执行在vars/main.yml中编写的任务。下面是我的vars/main.yml --- tasks: - name: java command 1 shell: "command" register: var1 - name: java command 2 shell: "command"

我想根据java类的输出为dictionary分配一个值。我正在使用shell模块调用java类。我尝试在vars/main.yml中编写任务,但ansible不执行在vars/main.yml中编写的任务。下面是我的vars/main.yml

---
tasks:
  - name:  java command 1
    shell: "command"
    register: var1

  - name:  java command 2
    shell: "command"
    register: var2

my_dictionary:
  key1: "{{ var1 }}"
  key2: "{{ var2 }}"

在访问
my_dictionary.key1
my_dictionary.key2
时,ansible认为它们未定义。如何执行任务并将值分配给字典。

将这两个任务放在
tasks/main.yml
中,然后使用创建
my\u字典
变量,其中包含注册的变量
var1
var2

set\u-fact
模块示例:

- set_fact:
    one_fact: something
    other_fact: "{{ local_var * 2 }}"
    cacheable: true

将这两个任务放在
tasks/main.yml
中,然后使用创建
my\u dictionary
变量,其中包含注册的变量
var1
var2

set\u-fact
模块示例:

- set_fact:
    one_fact: something
    other_fact: "{{ local_var * 2 }}"
    cacheable: true

使用外壳模块时,输出将存储在
var1.stdout或var1中。标准输出线
。取决于要使用的用例。问题是在将值分配给字典之前先执行任务。很抱歉,误解了这个问题,ansible将不会执行vars/main.yml中定义的任务。使用shell模块时,输出将存储在
var1.stdout或var1中。标准输出线
。取决于您要使用的用例。问题是在将值分配给字典之前执行任务。很抱歉,误解了这个问题,ansible将不会执行vars/main.ymlBut中定义的任务,如果我要跨多个执行使用
my_dictionary
<代码>我的字典按设置设置的事实将仅对后续播放可用。您如何在执行任务(意味着您希望var发生变化)的同时希望它“对后续播放可用”?你的意思是“可供以下角色使用”@user3086551哦,对于其他主机的后续播放,则不确定这是否可行。为什么不在需要时重新运行?如果它们是“昂贵”的任务,也许您可以将输出保存到文件中,并在后续的剧本中阅读,您将需要该输出?@tedder42是的,我的意思是该变量应可用于以下角色。这就是为什么我在vars/main.yml中设置变量,并通过导入vars文件
vars_文件
使用变量,您可以在播放的顶部设置变量。它将传播到后面的角色。您可以使用“事实”或“预任务”。我经常使用后者。但是,如果我想跨多个执行使用
my_dictionary
<代码>我的字典按设置设置的事实将仅对后续播放可用。您如何在执行任务(意味着您希望var发生变化)的同时希望它“对后续播放可用”?你的意思是“可供以下角色使用”@user3086551哦,对于其他主机的后续播放,则不确定这是否可行。为什么不在需要时重新运行?如果它们是“昂贵”的任务,也许您可以将输出保存到文件中,并在后续的剧本中阅读,您将需要该输出?@tedder42是的,我的意思是该变量应可用于以下角色。这就是为什么我在vars/main.yml中设置变量,并通过导入vars文件
vars_文件
使用变量,您可以在播放的顶部设置变量。它将传播到后面的角色。您可以使用“事实”或“预任务”。我经常使用后者。