Ansible:如何将变量集合传递给参数?循环覆盖问题求解
问题分析与解决方案
你的变量定义
- role: test-role vars: host-groups: - test-group1 - test-group2 - test-group3
错误写法的问题
你用loop循环给groups赋值的方式,本质是每次循环都会重新设置groups参数的值,前两次循环的结果会被后一次覆盖,最终只保留最后一次循环的设置(default-test-group + test-group3),这和你想把主机加入所有目标组的需求不符。
正确实现方式
不需要使用loop,直接将默认组和host-groups列表合并后赋值给groups即可:
groups: "{{ ['default-test-group'] + host-groups }}"
原理说明
Ansible的groups参数本身支持接收一个组名列表,通过列表加法操作,把包含默认组的单元素列表和host-groups列表合并,就能得到包含所有目标组的完整列表,主机会被一次性添加到所有这些组中,不会出现覆盖问题。
内容的提问来源于stack exchange,提问作者Maxi
相关产品推荐
相关产品推荐

