如何为Ansible变量vm_name设置格式校验规则?
在Ansible Playbook中校验vm_name变量的合规性
要实现对vm_name的长度和字符限制,同时在不符合规则时让任务失败,最直接的方式是用assert模块,结合正则表达式做字符校验,再加上长度检查。
方法一:用assert任务校验
在现有Playbook中添加一个assert任务,放在debug任务之前,用来验证变量是否符合规则:
- name: Set Vars conditions hosts: localhost vars: vm_name: "abcdefgh12_12-0" tasks: - name: Validate vm_name format and length assert: that: - vm_name | length <= 15 - vm_name is regex('^[a-zA-Z0-9_-]{1,15}$') fail_msg: "vm_name不符合规则:长度不能超过15字符,仅允许大小写字母、数字、下划线(_)和短横线(-)" success_msg: "vm_name格式校验通过" - name: Print vm_name debug: msg: "{{ vm_name }}"
规则说明:
vm_name | length <= 15:限制变量长度不超过15字符vm_name is regex('^[a-zA-Z0-9_-]{1,15}$'):正则表达式确保变量只能包含大小写字母、数字、下划线和短横线,同时长度在1-15之间(和长度校验形成双重保险)- 一旦不符合规则,assert任务会直接失败,输出
fail_msg里的提示,后续任务不会执行
方法二:变量定义时直接校验(Ansible 2.10+)
如果你的Ansible版本在2.10及以上,可以在变量定义时用validate选项,更早地拦截不符合规则的变量:
- name: Set Vars conditions hosts: localhost vars: vm_name: value: "abcdefgh12_12-0" validate: >- {% if value | length > 15 %} false {% elif not value is regex('^[a-zA-Z0-9_-]+$') %} false {% else %} true {% endif %} fail_msg: "vm_name不符合规则:长度不能超过15字符,仅允许大小写字母、数字、下划线(_)和短横线(-)" tasks: - name: Print vm_name debug: msg: "{{ vm_name }}"
这种方式在变量加载阶段就会校验,如果不符合规则,Playbook会直接终止,不需要等到执行任务阶段。
内容的提问来源于stack exchange,提问作者southwind
相关产品推荐
相关产品推荐

