新来的,找不到我的问题的参考,这似乎并不罕见。

我在同一组下有两个主机,每个主机都有其变量,比如:

[myHosts]
host1  a=1  b=10
host2  a=2  b=20

现在,我有一个任务需要执行两次 host1 只有一次 host1 的变量,第二次的值为 ahost1 ,和 bhost2 是的。 如果我这样写:

- role: my_role
      vars:
        a_val: {{ a }}
        b_val: {{ b }}
      loop: "{{ groups['myHosts'] }}"
      when: inventory_hostname in groups['myHosts'][0]

我明白了 a_valb_val 填充 host1 仅限值(适用于 a_val ,不是为了 b_val )中。

我知道似乎没有理由只调用同一个任务两次,引用 b 带着一些可靠的魔法变量( hostvars[groups['myHosts'][1]]['b'] 比如说,可以做到这一点),但主持人明天可能会有10个,这会很烦人(在这种情况下, when 条件还是可以的,因为一切都会在那里执行)。

我怎么能概括为 b_val 用适当的值填充?

最佳回复

问:"一个任务,只需要在host1上执行两次,一次使用host1的变量,第二次使用host1中的a和host2中的b的值。"

答: hostvars 允许您访问另一个主机的变量。比如这出戏

- hosts: host1
  tasks:
    - debug:
        msg: "a:{{ item.a }} b:{{ item.b }}"
      loop:
        - "{'a': {{ a }}, 'b': {{ b }} }"
        - "{'a': {{ a }}, 'b': {{ hostvars['host2'].b }} }"

给予

ok: [host1] => (item={'a': 1, 'b': 10}) => {
    "msg": "a:1 b:10"
}
ok: [host1] => (item={'a': 1, 'b': 20}) => {
    "msg": "a:1 b:20"
}
Tag: ansible