有没有办法让多个变量文件附加到数组?
最终目标是让每个文件为启动配置附加AWS安全组,而无需将这些组复制到每个文件中
例如:
group_vars/all.yml
group_vars/php.yml
group_vars/web.yml
all.yml:
aws_security_groups:
- sg-ssh
php.yml
aws_security_groups:
- sg-mysql
web.yml
aws_security_groups:
- sg-http
调试aws_security_groups会产生:
TASK [Debugging] ***************************************************************
ok: [XXX.XXX.XXX.XXX] => {
"aws_security_groups": [
"sg-mysql"
]
}
我们有API服务器和前端服务器,它们具有不同的缩放策略。我希望Web服务器拥有以下组:sg-web和sg-ssh以及api服务器:sg-web,sg-ssh和sg-mysql
答案 0 :(得分:2)
AFAIK在Ansible的定义时间内无法合并列表变量
作为解决方法,您可以在all.yml
:
aws_security_groups:
all:
- sg-ssh
- sg-all
php:
- sg-mysql
web:
- sg-http
或者在相应的组变量文件中定义每个子键(all,php,web等)并使用merge hash_behavior(但通常不建议更改hash_behavior)。
然后使用这个魔法来获取安全组列表:
- debug: msg="{{ (group_names + ['all']) | intersect(aws_security_groups.keys()) | map('extract', aws_security_groups) | sum(start=[]) }}"
这将根据当前主机的组显示所有安全组的清单。