Terraform动态生成变量文件:supported_regions格式修正求助
解决Terraform生成supported_regions变量格式问题
你的问题出在使用了列表推导式生成结果,而目标是要生成键值对的Map结构。当前代码里的[for region in var.regions : ...]会生成字符串数组,我们需要改用Terraform的映射推导式来构建Map。
修改supported_regions变量的生成逻辑,把列表推导式替换为映射推导式,直接生成键值对:
resource "local_file" "generated_variables" { for_each = { for kv in local.distinct_envs_and_regions : "${kv.env}.${kv.region}" => kv } content = <<EOF variable "supported_regions" { default = ${jsonencode({ for region in var.regions : "rg-${each.value.env}-${var.project}-${region.region_short}" => region.region_name } )} } variable "region_info" { default = "${each.value.region}" } variable "project" { default = "${var.project}" } variable "environment" { default = "${each.value.env}" } variable "tenant_id" { default = "${var.tenant_id}" } variable "subscription_id" { default = "${var.subscription_id}" } variable "common_tags" { default = { environment = "${each.value.env}" project = "${var.project}" managed_by = "terraform" } } EOF filename = "../${var.project}-iac/environments/category/${var.environment_category}/${each.value.env}/core/variables_generated.tf" }
关键修改点:
- 将列表推导式的方括号
[ ... ]替换为映射推导式的大括号{ ... } - 推导式内使用
"键字符串" => 值的格式,直接生成Map的键和对应值,不再拼接等式字符串 - 移除了
distinct函数(如果var.regions中不会生成重复的键,无需保留;若存在重复键风险,可先对var.regions做去重处理后再进入推导式)
修改后生成的supported_regions变量会符合你的预期格式:
variable "supported_regions" { default = { rg-prd-adm-suk = "uksouth", rg-prd-adm-wuk = "ukwest" } }
内容的提问来源于stack exchange,提问作者Syngate
相关产品推荐
相关产品推荐

