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 }}

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 }}
      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,它应该是虚拟循环索引。