新的ansible,找不到我的问题的参考,这似乎并不罕见。
我在同一个组下有两个主机,每个主机都有自己的变量,例如:
[myHosts]
host1 a=1 b=10
host2 a=2 b=20
现在,我有一个任务需要在host1
only 上执行两次,一次使用的变量,第二次使用from和fromhost1
的值。如果我这样写:a
host1
b
host2
- 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
)。
我知道似乎没有理由我可以两次调用同一个任务,引用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]