如何在Ansible中基于组内主机的private_ip构建变量?
实现方式
直接使用Ansible的map结合extract过滤器就能快速实现需求,核心表达式如下:
{{ groups.mygroup | map('extract', hostvars, 'private_ip') | join(',') }}
各部分说明:
groups.mygroup:获取mygroup组内的所有主机列表map('extract', hostvars, 'private_ip'):遍历主机列表,从全局变量字典hostvars中提取每台主机对应的private_ip值join(','):将提取到的IP列表用逗号拼接成目标格式的字符串
验证示例
可以写个简单的测试playbook确认效果:
- name: 生成private_ip拼接字符串 hosts: localhost gather_facts: false tasks: - debug: msg: "{{ groups.mygroup | map('extract', hostvars, 'private_ip') | join(',') }}"
运行后会输出:
10.0.0.2,10.0.0.3,10.0.0.4
补充说明
如果组内存在未定义private_ip的主机,可以添加默认值避免报错:
{{ groups.mygroup | map('extract', hostvars, 'private_ip', default='') | join(',') }}
内容的提问来源于stack exchange,提问作者justin8976
相关产品推荐
相关产品推荐

