是否可以使用全局vars在剧本本身中为特定主机设置变量?
因此,游戏手册会被配置成这样:
---
- hosts:
- host-1
- host-2
vars:
host-1: # < - set vars for host-1 specifically
a_var: yes
host-2: # < - set vars for host-2 specifically
a_var: no我知道我可以在运行时使用group_vars、host_vars、库存文件或set_fact,但这不是我想要的。
博士们描述的“剧本host_vars",但我还没有弄清楚它是如何配置的。
发布于 2021-02-03 05:33:12
Q:使用全局"Set,在剧本本身中指定主机的vars."变量
答:将特定于主机的变量放入全局字典中,例如my_hostvars。(事实上,创建您自己的主机)。例如
- hosts: host-1,host-2
vars:
my_hostvars:
host-1: # < - set vars for host-1 specifically
a_var: yes
host-2: # < - set vars for host-2 specifically
a_var: no
tasks:
- debug:
msg: "{{ my_hostvars[inventory_hostname]['a_var'] }}"给出
ok: [host-1] =>
msg: true
ok: [host-2] =>
msg: false这取决于你在哪里宣布字典,以及你如何在剧本中引用它。见变量优先级:我应该把变量放在哪里?。
将变量放入您自己的事实中,以简化访问。例如
- set_fact:
my_facts: "{{ my_hostvars[inventory_hostname] }}"
- debug:
var: my_facts.a_var给
ok: [host-1] =>
my_facts.a_var: true
ok: [host-2] =>
my_facts.a_var: false如果需要,可以通过设置变量来进一步简化访问。(例如,为了避免重写已经使用变量的代码)。
- set_fact:
a_var: "{{ my_facts.a_var }}"
b_var: "{{ my_facts.b_var }}"
c_var: "{{ my_facts.c_var }}"您可以使用它来设置或自定义(优先级19)。默认值(如果需要)。例如,
- set_fact:
a_var: "{{ my_facts.a_var|default('a') }}"
b_var: "{{ my_facts.b_var }}"
c_var: "{{ my_facts.c_var }}"https://stackoverflow.com/questions/66018973
复制相似问题