如何在Ansible Playbook中验证--extra-vars传入的变量值合法性?
验证Ansible传入的hostName并在非法时终止执行
你可以通过添加fail模块任务实现验证逻辑,当传入的hostName不在预定义列表中时,直接终止Playbook执行。以下是修改后的完整Playbook:
- hosts: localhost gather_facts: false vars: prod_mgmt_network: "{{ ['server00'] | product(range(start,end)) | map('join') | list }}" start: 4281 end: 4283 tasks: - name: 检查是否传入hostName参数 fail: msg: "错误:必须通过--extra-vars传入hostName参数" when: hostName is not defined - name: 验证hostName是否在允许列表中 fail: msg: "错误:hostName {{ hostName }} 不在允许列表内,允许的主机名是: {{ prod_mgmt_network }}" when: hostName not in prod_mgmt_network - debug: var: prod_mgmt_network
逻辑说明
- 参数存在性检查:第一个任务先判断
hostName是否被传入,若未传入则直接终止并提示错误。 - 列表归属验证:第二个任务判断
hostName是否在prod_mgmt_network预定义列表中,若不在则终止Playbook并输出允许的主机名列表。 - 正常执行流程:只有当
hostName合法时,才会执行后续的debug任务。
执行示例
- 合法参数执行:
ansible-playbook --extra-vars hostName=server004281 test.yml
执行结果会跳过两个fail任务,直接输出prod_mgmt_network的内容。
- 非法参数执行:
ansible-playbook --extra-vars hostName=server004181 test.yml
执行到第二个任务时会触发错误,输出提示信息并终止Playbook,不会执行后续的debug任务。
内容的提问来源于stack exchange,提问作者chin wooi Ng
相关产品推荐
相关产品推荐

