Terraform AKS模块如何实现max_surge参数的正则校验与规则限制?
AKS Terraform模块max_surge参数校验实现方案
变量声明及校验规则
直接在variables.tf中使用如下定义即可覆盖所有合法场景,同时满足百分比不超过33%的限制:
variable "max_surge" { type = any description = "AKS节点池升级时的最大 surge 数量/占比,百分比取值不可超过33%" validation { condition = ( # 适配数字类型的纯数值输入,要求为正整数 ( try(type(var.max_surge) == number, false) && var.max_surge > 0 && floor(var.max_surge) == var.max_surge ) || # 适配字符串类型输入 ( try(type(var.max_surge) == string, false) && ( # 纯数字字符串场景 can(regex("^\\d+$", var.max_surge)) || # 百分比场景,校验格式+数值上限 ( can(regex("^\\d+%$", var.max_surge)) && tonumber(trimsuffix(var.max_surge, "%")) <= 33 ) ) ) ) error_message = "max_surge 参数仅支持正整数(数字/字符串格式均可)或不超过33%的百分比字符串格式,示例合法值:3、\"5\"、\"30%\"。" } }
补充适配说明
- 如果你不需要兼容数字类型输入,希望强制用户统一传字符串格式,可将
type改为string,删除condition中第一个数字类型判断的分支即可 - 如果需要支持带小数的百分比(例如
32.5%),可将百分比匹配的正则改为^\\d+(\\.\\d+)?%$,tonumber可以正常识别小数完成比较 - 上述校验会在
terraform plan阶段提前拦截非法输入,不会等到调用Azure API时才报错
资源块引用保持不变
你原来的azurerm_kubernetes_cluster资源中的配置不需要修改,直接沿用即可:
upgrade_settings { max_surge = var.max_surge }
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

