首页 > 解决方案 > Terraform:将变量列表传递给容器环境变量

问题描述

我正在尝试找到一种方法如何将列表变量传递/映射到kubernetes_deployment容器环境变量。我在容器中运行一个 asp.net 核心应用程序,并尝试通过设置 env 变量来修改应用程序以覆盖应用程序 settings.json。从 settings.json 覆盖单个值不是问题,问题是我是否需要在那里定义/覆盖整个数组。

我在 terrafrom 中有这样的变量列表:

variable "allowed_cars" {
  type = list(
      object({
      manufacturer  = string
      model  = string
    })
  )
}

然后,我有容器的kubernetes_deployment资源定义。

我相信如果我像这样为容器设置环境变量,它可以工作:

env {
   name  = "App__AllowedCars__0__Manufacturer"
   value = "xxx"
}
env {
   name  = "App__AllowedCars__0__Model"
   value = "xxx"
}
env {
   name  = "App__AllowedCars__1__Manufacturer"
   value = "xxx"
}
env {
   name  = "App__AllowedCars__1__Model"
   value = "xxx"
}
...

有没有办法根据allowed_cars terraform 变量以动态方式将这些环境变量传递给容器?我不知道每个环境会定义多少个项目,等等......

非常感谢。

标签: .net-coreenvironment-variablesterraform

解决方案


这个定义的一些东西(azurerm_container_group在 azure 中使用的例子)

environment_variables = "${merge(var.env_vars,var.secure_env_vars,local.master_env)}"

然后可以传入变量

variable "env_vars" {
  type = "map"
  description = "envvaars"

  default = {
    WEB_USER         = "locust"
    HATCH_RATE       =  25
    LOCUST_COUNT     =  50
    LOCUST_FILE      = "/locust/locustfile.py"
    ATTACKED_HOST    = "https://api-perf.yrdy.com"
  }
}

variable "secure_env_vars" {
  type = "map"
  description = "secure env vars"

  default = {
    WEB_PASSWORD     = "dummy"
    API_KEY          = "test"
  }
}

推荐阅读