如何在Ansible Playbook中按Inventory变量筛选目标主机?
Ansible 通过Inventory变量筛选主机的实现方法
当然可以实现通过Inventory内的变量筛选主机,甚至支持正则表达式匹配,以下是几种常用方案:
1. 直接使用主机模式变量筛选
这是最简单的方式,直接在hosts字段中通过变量条件过滤:
- name: test hosts: "*:env=pre" roles: - backend
*匹配所有主机,:env=pre表示筛选出env变量值为pre的主机。
2. 正则表达式匹配
如果需要更复杂的匹配规则(比如模糊匹配、模式匹配),可以使用~操作符结合正则表达式:
比如筛选env值以pre开头的主机:
- name: test hosts: "*:env ~ '^pre.*'" roles: - backend
这里~表示正则匹配,'^pre.*'是正则表达式,可根据需求调整匹配规则。
3. Jinja2过滤器实现复杂筛选
如果需要多条件组合或更灵活的逻辑,可借助Jinja2过滤器处理:
- name: test hosts: "{{ groups.all | selectattr('env', 'equalto', 'pre') | map(attribute='inventory_hostname') | list }}" roles: - backend
通过selectattr筛选出env等于pre的主机,再通过map提取主机名转为列表。
以上几种方式都能满足你的需求,可根据实际场景选择合适的方法。
内容的提问来源于stack exchange,提问作者LuFerSYSArch
相关产品推荐
相关产品推荐

