ansible:在同一主机上多次运行任务,使用来自另一台主机的变量

ansible:在同一主机上多次运行任务,使用来自另一台主机的变量

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

我在同一个组下有两个主机,每个主机都有自己的变量,例如:

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

现在,我有一个任务需要在host1only 上执行两次,一次使用的变量,第二次使用from和fromhost1的值。如果我这样写:ahost1bhost2

- 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一些 ansible 魔法变量的正确值(hostvars[groups['myHosts'][1]]['b']例如可以达到目的),但明天东道主可能会是10这会很烦人(在这种情况下,条件when仍然会很好,因为一切都会一直在那里执行)。

我怎样才能概括地填充b_val适当的值?

答案1

问:“只需在 host1 上执行两次的任务,一次使用 host1 的变量,第二次使用来自 host1 的 a 值,以及来自 host2 的 b 值。”

A:主机变量允许您访问另一台主机的变量。例如 play

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

答案2

这就是我所需要的:https://stackoverflow.com/a/32336359/827818

我制作了一个单独的列表,如下所示:

bs_list:
  host1:
    b: val1
  host2:
    b: val2

包括pre_tasks,然后

- debug: 
    msg: "{{ item.value.b }}"
  with_dict: "{{ bs_list }}"
  when: inventory_hostname in groups['myHosts'][0]

相关内容