使用 Terraform 创建多个命名空间

Creating multiple namespaces using Terraform

我正在尝试从 json blob 输入文件创建多个命名空间,如下所示:

我的tfvars.json文件

{
    "example1" : [
        {
            "namespace_name" : "test-1", 
            "team_name" : "test",  
        },
        {
            "namespace_name" : "test-2", 
            "team_name" : "test2", 
        }
   ]
}

我的 main.tf 文件如下所示:

resource "kubernetes_namespace" "aks_namespace" {
    metadata {
      annotations = {
        name = var.namespace_name
      }
      labels = {
        name = var.team_name
      }
      name = var.namespace_name
      }
}

我已经尝试了几乎所有可用的选项,例如 for_each 和动态.. 似乎无法在循环中创建名称空间。 只是想知道这是否真的可能.. 不幸的是,我不应该更改输入 .json 格式.. 有什么建议或想法吗?

我使用您的详细信息尝试了所有可能性,但由于 example1 是一个元组值,在 for_each 中声明它会在创建命名空间时出错。

所以,作为解决方案,我在 terraform.tfvars.json 中声明变量 example1,如下所示:

{    "example1" : [
    [
            "test-1", 
            "test"
         ],
        [
         "test-2", 
        "test2" 
        ]
    ]
} 

这是我正在使用的main.tf

terraform {
  required_providers {
    kubernetes = {
      source = "hashicorp/kubernetes"
      version = "2.5.0"
    }
  }
}
variable "example1" {
  
}

provider "kubernetes" {
  # Configuration options
}
resource "kubernetes_namespace" "aks_namespace" {
  for_each = {for i,v in var.example1: i=>v}
metadata {
  annotations = {
    name = each.value[0]
  }
  labels = {
    name = each.value[1]
  }
  name = each.value[0]
}
}

输出:


更新: terraform.tfvars.json

{
    "example1" : [
        {
            "namespace_name" : "test-1", 
            "team_name" : "test"
        },
        {
            "namespace_name" : "test-2", 
            "team_name" : "test2"
        }
   ]
}

main.tf

terraform {
  required_providers {
    kubernetes = {
      source = "hashicorp/kubernetes"
      version = "2.5.0"
    }
  }
}
variable "example1" {
  type = list(object({
    namespace_name = string
    team_name = string
  }))
}

provider "kubernetes" {
  # Configuration options
}
resource "kubernetes_namespace" "aks_namespace" {
  for_each = {for i,v in var.example1: i=>v}
metadata {
  annotations = {
    name = var.example1[each.key].namespace_name
  }
  labels = {
    name = var.example1[each.key].team_name
  }
  name = var.example1[each.key].namespace_name
}
}