如何基于主机布尔变量将符合条件的主机纳入另一主机组?
Ansible 根据主机布尔变量筛选主机到目标组
方法1:使用Inventory内置变量筛选(Ansible 2.8+)
这是最简洁的实现方式,直接在目标组中通过条件匹配原组内的主机:
[group-1] hostA a=true hostB b=true hostC a=true b=true c=true [group-a] # 筛选group-1中a变量为true的主机 @group-1[?a]
语法说明:@group-1表示引用原主机组,[?a]是筛选条件,直接匹配所有a变量为true的主机(布尔变量可直接用变量名判断真假)。
方法2:使用Jinja2模板实现复杂筛选
如果需要更灵活的逻辑(比如多条件组合),可以用Jinja2表达式遍历原组并筛选:
[group-1] hostA a=true hostB b=true hostC a=true b=true c=true [group-a] {% for host in groups['group-1'] %} {% if hostvars[host].a | default(false) %} {{ host }} {% endif %} {% endfor %}
注意:需要在
ansible.cfg中启用Jinja2 Inventory插件,添加配置:enable_plugins = ini, jinja2
验证筛选结果
执行以下命令查看目标组的主机列表,确认是否符合预期:
ansible group-a --list-hosts
内容的提问来源于stack exchange,提问作者javadev
相关产品推荐
相关产品推荐

