Terraform map(object)变量单行输入报错,求正确语法
Terraform单行传入map(object)类型变量的正确方法
问题根源分析
你当前的写法存在三个核心问题:
- 变量名不匹配:定义的变量是
user_node_pool,但传入的参数名是user_node_pools(多了末尾的s),导致Terraform无法匹配到目标变量。 - 类型错误:将map结构用JSON字符串包裹并加引号,会被Terraform识别为
string类型,和变量要求的map(object)类型不兼容。 - 布尔值格式错误:
user_auto_scaling是bool类型,不能用带引号的"true",必须直接写小写的true(无引号)。
正确单行传参写法
1. 命令行直接传入(terraform apply -var)
使用单引号包裹整个变量值,内部保持标准HCL的map结构:
terraform apply -var 'user_node_pool={"pool2": {"mode": "User", "vm_size": "Standard_D2_v3", "user_max_pods": 110, "user_os_size": 128, "node_os": "Windows", "user_auto_scaling": true, "user_min_count": 1, "user_max_count": 1}}'
2. 通过环境变量传入(TF_VAR_前缀)
同样用单引号包裹结构,直接赋值给环境变量:
export TF_VAR_user_node_pool='{"pool2": {"mode": "User", "vm_size": "Standard_D2_v3", "user_max_pods": 110, "user_os_size": 128, "node_os": "Windows", "user_auto_scaling": true, "user_min_count": 1, "user_max_count": 1}}'
注意事项
- 若使用Windows CMD环境,外层改用双引号,内部双引号需转义为
"":terraform apply -var "user_node_pool={""pool2"": {""mode"": ""User"", ""vm_size"": ""Standard_D2_v3"", ""user_max_pods"": 110, ""user_os_size"": 128, ""node_os"": ""Windows"", ""user_auto_scaling"": true, ""user_min_count"": 1, ""user_max_count"": 1}}" - 确保所有字段类型与变量定义严格匹配:数字类型直接写数值,布尔值用
true/false(小写无引号),字符串用双引号包裹。
内容的提问来源于stack exchange,提问作者Susheel Bhatt
相关产品推荐
相关产品推荐

