Ansible 如何匹配设置了指定布尔变量的主机?
Ansible筛选指定布尔变量主机的操作方法
有两种常用方案可以实现只对restrict_access标志位为true的主机执行nginx部署角色,具体操作如下:
方案1:在playbook中添加条件判断
直接在调用nginx角色的play层级添加when条件,示例配置如下:
- name: 执行nginx部署 hosts: all roles: - nginx # 仅匹配restrict_access为真的主机执行角色 when: restrict_access | bool
- 特点:无需调整执行命令,所有非目标主机会跳过角色执行步骤,适合固定需要该筛选逻辑的场景
- 注意:如果部分主机未定义
restrict_access变量,可以将条件改为when: restrict_access is defined and restrict_access | bool避免报错
方案2:执行命令时动态筛选主机
如果是临时需要单次执行,不想修改playbook,可以直接在ansible-playbook命令中通过--limit参数筛选目标主机,命令示例:ansible-playbook 你的nginx部署playbook文件.yml --limit "{% for h in groups['all'] if hostvars[h].restrict_access | default(false) | bool %}{{ h }}{% if not loop.last %},{% endif %}{% endfor %}"
- 特点:执行前就完成主机筛选,不会对非目标主机执行任何操作,执行效率更高
小提示:如果你的
restrict_access变量定义在特定主机组下,只需要把上述表达式中的groups['all']替换为对应组名即可,缩小筛选范围提高效率。
内容的提问来源于stack exchange,提问作者Dragon B
相关产品推荐
相关产品推荐

