如何通过Ansible的assert模块验证额外变量中的主机名列表
Ansible主机名合法性校验实现
直接上可运行的解决方案,通过合并预定义合法列表、对比传入主机名的方式完成校验,非法主机存在时直接终止任务:
完整剧本(test.yml)
--- - name: 校验传入主机名是否合法 hosts: localhost gather_facts: no vars: # 预定义的两组合法主机列表 prod_mgmt_network: - prodsrv001 - prodsrv002 - prodsrv003 test_mgmt_network: - testsrv001 - testsrv002 - testsrv003 # 合并成统一的合法主机池 valid_hosts: "{{ prod_mgmt_network + test_mgmt_network }}" tasks: # 第一步:找出所有不在合法池里的主机 - name: 筛选非法主机名 set_fact: invalid_hosts: "{{ hostname | difference(valid_hosts) }}" # 第二步:如果有非法主机,直接让任务失败并提示 - name: 校验主机合法性 fail: msg: "发现非法主机名:{{ invalid_hosts | join(', ') }},请检查传入参数" when: invalid_hosts | length > 0
测试用命令
比如传入包含非法主机的参数:
ansible-playbook test.yml --extra-vars "hostname=['testsrv001', 'testsrv008283', 'testsrv008284']"
执行结果
- 当存在非法主机时,剧本会立刻终止,输出包含非法项的错误提示
- 所有主机都合法时,校验任务会自动跳过,可继续执行后续业务逻辑
内容的提问来源于stack exchange,提问作者chin wooi Ng
相关产品推荐
相关产品推荐

