gpt4 book ai didi

Ansible : host in multiple groups

转载 作者:行者123 更新时间:2023-12-03 23:49:06 27 4
gpt4 key购买 nike

我有 2 组主机:PC 和服务器
我有 2 个 group_vars(PC 和服务器),在每个文件 packages.yml 中
这些文件定义了要安装在 pc 主机和服务器主机上的软件包列表

我有安装默认包的角色

问题是:角色任务仅考虑 group_vars/pc/packages.yml,未安装 group_vars/servers/packages.yml 中的包

当然我想要的是安装为 pc 和服务器定义的包

不知道是bug还是功能...

谢谢你的帮助

这是配置:

# file: production
[pc]
armen
kerbel
kerzo

[servers]
kerbel

---
# packages on servers
packages:
- lftp
- mercurial

---
# packages on pc
packages:
- keepassx
- lm-sensors
- hddtemp

最佳答案

这不是一个错误。根据docs关于变量优先级,你不应该在多个地方定义一个变量并尽量保持简单。 Michael DeHaan(Ansible 的首席开发人员)responded关于这个主题的类似问题:

Generally I find the purpose of plays though to bind hosts to roles, so the individual roles should contain the package lists.



我会使用角色,因为它更清洁 IMO。

如果你真的想要(这不是推荐的方式),你可以设置 hash_behaviour ansible.cfg 中的选项:
[defaults]
hash_behaviour = merge

这将导致在重新定义散列 (dict) 时合并两个值,而不是用新值替换旧值。但是,这不适用于列表,因此您需要创建列表的散列,例如:

group_vars/all/package.yml:
packages:
all: [pkg1, pkg2]

group_vars/servers/package.yml:
packages:
servers: [pkg3, pkg4]

虽然在剧本中循环有点复杂。

关于Ansible : host in multiple groups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com