如何在Terraform的map(any)变量中配置list(string)类型node_taints
解决Terraform中map(any)变量下node_taints类型冲突问题
问题根源在于:使用map(any)类型时,Terraform会根据默认值自动推断map内每个元素的类型。你的默认值里vm1的node_taints是null,vm2的是list(string),两种类型不兼容,导致Terraform无法统一推断,从而抛出错误。
下面提供两种解决方案:
方案一:统一node_taints类型
将vm1中的node_taints从null改为空列表[],这样两个元素的node_taints都属于list(string)类型,类型统一后即可解决报错。修改后的默认值片段:
vm1 = { user_agents_name = "upool01" user_agents_size = "Standard_D2s_v5" user_agents_count = "1" user_agents_os_disk_size = "32" max_pods = "20" orchestrator_version = "1.27.7" node_taints = [] # 将null改为空列表 node_labels = { "commponent" = "idx" "keyexample" = "valueexample" } }
方案二:显式定义结构化类型(推荐)
用map(object({...}))替代map(any),显式声明每个字段的类型,并将node_taints设为可选的list(string)类型,允许其值为null。这种方式比map(any)更安全,能提前发现类型错误:
variable "usernodepool_vm" { description = "VM of AKS Cluster" type = map(object({ user_agents_name = string user_agents_size = string user_agents_count = string user_agents_os_disk_size = string max_pods = string orchestrator_version = string node_taints = optional(list(string), null) node_labels = map(string) })) default = { vm1 = { user_agents_name = "upool01" user_agents_size = "Standard_D2s_v5" user_agents_count = "1" user_agents_os_disk_size = "32" max_pods = "20" orchestrator_version = "1.27.7" node_taints = null node_labels = { "commponent" = "idx" "keyexample" = "valueexample" } } vm2 = { user_agents_name = "upool02" user_agents_size = "Standard_D2s_v5" user_agents_count = "1" user_agents_os_disk_size = "32" max_pods = "20" orchestrator_version = "1.27.7" node_taints = ["key01=value01:NoSchedule"] node_labels = { "compponent" = "oom" "no" = "numeric" } } } }
内容的提问来源于stack exchange,提问作者gotothesky
相关产品推荐
相关产品推荐

