使用 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
}
}
我正在尝试从 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
}
}