ansible:使用来自另一台主机的变量在同一台主机上多次运行任务
ansible新手,找不到关于我的问题的参考资料,这似乎并不罕见 我在同一个组下有两个主机,每个主机都有它的变量,比如:ansible:使用来自另一台主机的变量在同一台主机上多次运行任务,ansible,Ansible,ansible新手,找不到关于我的问题的参考资料,这似乎并不罕见 我在同一个组下有两个主机,每个主机都有它的变量,比如: [myHosts] host1 a=1 b=10 host2 a=2 b=20 现在,我有一个任务只需要在host1上执行两次,一次使用host1的变量,第二次使用host1中的a,以及host2中的b。 如果我这样写: - role: my_role vars: a_val: {{ a }} b_val: {{ b }}
[myHosts]
host1 a=1 b=10
host2 a=2 b=20
现在,我有一个任务只需要在host1
上执行两次,一次使用host1
的变量,第二次使用host1
中的a
,以及host2
中的b
。
如果我这样写:
- role: my_role
vars:
a_val: {{ a }}
b_val: {{ b }}
loop: "{{ groups['myHosts'] }}"
when: inventory_hostname in groups['myHosts'][0]
我得到的a_val
和b_val
仅填充了host1
值(这对a_val
很好,而不是b_val
)
我知道我似乎没有理由只调用同一个任务两次,引用一些ansible魔术变量的适当值b
(hostvars[groups['myHosts'][1]['b']
,例如,可以实现这个技巧),但主机明天可能是10,这会很烦人(在这种情况下,when
条件仍然可以,因为所有操作都将始终在那里执行)
我如何概括,使b_val
填充正确的值?您需要。特别是hostvars
这就是我需要的:
我单独列了一张这样的清单:
bs_list:
host1:
b: val1
host2:
b: val2
包含在预任务中,然后
- debug:
msg: "{{ item.value.b }}"
with_dict: "{{ bs_list }}"
when: inventory_hostname in groups['myHosts'][0]
不,请看我的答案。关键是我不能用另一个变量分割hostvars,它应该是虚拟循环索引。