Ansible 如何通过调用java类跨所有角色动态设置变量
我想根据java类的输出为dictionary分配一个值。我正在使用shell模块调用java类。我尝试在vars/main.yml中编写任务,但ansible不执行在vars/main.yml中编写的任务。下面是我的vars/main.ymlAnsible 如何通过调用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"
---
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_文件
使用变量,您可以在播放的顶部设置变量。它将传播到后面的角色。您可以使用“事实”或“预任务”。我经常使用后者。