场景:
all.yml
ports
- 22
- 2376
- 2377
manager.yml
ports
- 443
worker.yml
ports
- 80
需要管理节点的输出
ports
- 22
- 2376
- 2377
- 443
需要工作节点的输出
ports
- 22
- 2376
- 2377
- 80
问题:
由于ansible允许group_vars,并且模型将替换 vars而不是 merge ,因此如何管理上述情况而不必在每个group_vars文件?
我怀疑答案是重复变量。我已经读过有关允许ansible改用merge的内容,但这仅适用于字典,而不适用于上述列表,并且对此一无所知。
我问的原因是,当使用银河中的股票角色(如防火墙角色)时,(据我所知)正确使用group_vars并列出基于角色几乎是不可能的。是一个或另一个。
上面的示例过于简化,在现实世界中,端口定义大约为6行配置,并且显然重复很多。
答案 0 :(得分:0)
这是正确的
模型是替换var而不是合并
鉴于文件位于group_vars目录中,因此可以选择在manager.yml中声明特定变量
manager_ports:
- 443
和worker.yml
中worker_ports:
- 80
然后,例如,让我们合并剧本中的列表(未测试)
- hosts: manager
tasks:
- set_fact:
ports: "{{ ports + manager_ports }}"
- hosts: worker
tasks:
- set_fact:
ports: "{{ ports + worker_ports }}"
部分中找到
答案 1 :(得分:0)
好吧,假设您没有将let value:[String:Any] = ["key":"value"]
ref.child("Data").childByAutoId().setValue(value)
分配给localhost
之外的其他组,则可以在all
文件中引用它:
all.yml:
group_vars
manager.yml:
ports:
- 22
- 2376
- 2377
worker.yml:
ports:
- "{{ hostvars['localhost'].ports }}"
- 443