Terraform:从variables.tf到Vault如何使用Vault解决Terraform中的for_each

问题描述

我有一个terraform代码(带有terraform v0.12.21),该代码在基础架构方面构建一个GKE和Cloudsql,在部署方面,在GKE内部署N个Web服务器容器。

在variables.tf文件中,我定义了一个wordpress_site”数组。 如今,当需要进行新的部署时,我只需在“认”中添加一个新项目,并使用terraform apply完成部署。

variables.tf包含以下内容

variable "wordpress_site" {
  type = map(object({
    name         = string
    url          = string
    disk         = string
    MysqL_passwd = string
    api_token    = string
    api_key      = string
    api_country  = string
    api_language = string
    api_wp_lang  = string
    api_colour   = string
    template     = string
  }))
  default = {
    example1 = {
      name         = "example1"
      url          = "example1.com"
      disk         = "1Gi"
      MysqL_passwd = "PaSSwOrd1"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "it"
      api_language = "it"
      api_wp_lang  = "it_IT"
      api_colour   = "1"
      template     = "p1"
    }
    example2 = {
      name         = "example2"
      url          = "example2.com"
      disk         = "1Gi"
      MysqL_passwd = "PaSSwOrd2"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "uk"
      api_language = "en"
      api_wp_lang  = "en_US"
      api_colour   = "1"
      template     = "p1"
    }
...
...
...
    exampleN = {
      name         = "exampleN"
      url          = "exampleN.com"
      disk         = "1Gi"
      MysqL_passwd = "PaSSwOrdN"
      api_token    = "TokenHERE"
      api_key      = "APIHere"
      api_country  = "uk"
      api_language = "en"
      api_wp_lang  = "en_US"
      api_colour   = "1"
      template     = "p1"
    }
}

然后,当我调用它们进行部署时,我正在使用for_each函数和each.value.XXX来获取其变量:

resource "kubernetes_deployment" "wordpress" {
  for_each = var.wordpress_site

  Metadata {
    name   = each.value.name
    labels = { 
      app = each.value.name
      app-function = "wordpress"
    }
  }
...
...
}

好吧,让Vault作为terraform的提供者,所以在main.tf中,我将添加新的提供者,例如:

provider "vault" {
  address = "http://XXX.YYY.ZZZ.TTT:8200"
  }

并在调用terraform应用之前制作一个vault login,但是,由于我要部署3000多个WordPress网站,因此我希望将它们全部定义在Vault存储中并通过Vault引擎进行组织,但是进行这些更改的最佳方式是什么?

还有,如何将它们全部放入保险柜?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)