Terraform:如果地图中不存在键,则使用默认值

问题描述 投票:0回答:1

我有一个局部变量定义如下:

locals {
  subnets = {
    # AWS Account:
    "222222222222" = {
      # Environment name:
      "prod" = {
        "us-west-2" : ["subnet-11111111111", "subnet-22222222", "subnet-3333333", "subnet-333333"]
      }
      "default" = {
        "us-east-2" : split(",", data.terraform_remote_state.vpc.outputs.private_subnets)
      }
    }
  }
}

# and I can reference it like so:
subnet_ids = local.subnets[var.aws_account_id][var.environment][var.region]

不幸的是,

var.enviroment
唯一可能的两个键是“prod”或“default”。

我真正想做的是:(伪代码):

if var.environment is not a key in local.subnets[var.aws_account_id], then use the "default" value for var.environment.

这在地形中可能吗?

terraform
1个回答
0
投票

以下示例应该很容易理解并解决您的问题。

示例代码:

variable "aws_account_id" {
  type        = string
  description = "AWS account ID."
  default     = "222222222222"
}

variable "environment" {
  type        = string
  description = "Environment name."
}

variable "region" {
  type        = string
  description = "AWS region."
  default     = "us-west-2"
}

locals {
  subnets = {
    # AWS Account:
    "222222222222" = {
      # Environment name:
      "prod" = {
        "us-west-2" : ["subnet-11111111111", "subnet-22222222", "subnet-3333333", "subnet-333333"]
      }
      "default" = {
        "us-east-2" : ["subnet-default-1", "subnet-default-2"]
      }
    }
  }

  selected_account     = local.subnets[var.aws_account_id]
  selected_environment = can(local.selected_account[var.environment]) ? var.environment : "default"
  selected_subnets     = local.selected_account[local.selected_environment]
}

output "selected_environment" {
  value       = local.selected_environment
  description = "Selected environment."
}

output "selected_subnets" {
  value       = local.selected_subnets
  description = "Selected subnets."
}

运行

terraform plan -var environment=qa
(不存在的环境):

Changes to Outputs:
  + selected_environment = "default"
  + selected_subnets     = {
      + us-east-2 = [
          + "subnet-default-1",
          + "subnet-default-2",
        ]
    }

运行

terraform plan -var environment=prod
(现有环境):

Changes to Outputs:
  + selected_environment = "prod"
  + selected_subnets     = {
      + us-west-2 = [
          + "subnet-11111111111",
          + "subnet-22222222",
          + "subnet-3333333",
          + "subnet-333333",
        ]
    }
© www.soinside.com 2019 - 2024. All rights reserved.