如何使用Terraform基于固定格式JSON输入批量创建Kubernetes Namespace
Terraform 批量创建Kubernetes Namespace 可行方案
该需求可实现,无需修改现有tfvars.json格式,配置调整如下:
步骤1:声明匹配输入格式的变量
新增variables.tf文件,定义和tfvars.json顶层key对应的变量:
variable "example1" { type = list(object({ namespace_name = string team_name = string })) description = "List of namespace configurations from tfvars.json" }
步骤2:修改main.tf使用for_each循环创建资源
之前for_each失效的原因是直接传入了列表类型值,Terraform要求for_each必须输入带唯一键的map或者字符串集合,需要先将输入列表转换为以namespace名称为唯一键的映射:
resource "kubernetes_namespace" "aks_namespace" { # 将输入列表转换为map,用namespace_name作为唯一键,避免资源随列表顺序变化被误重建 for_each = { for ns in var.example1 : ns.namespace_name => ns } metadata { annotations = { name = each.value.namespace_name } labels = { name = each.value.team_name } name = each.value.namespace_name } }
验证效果
执行terraform plan会输出待创建的2个Namespace资源,实例键分别为test-1、test-2,确认无误后执行terraform apply即可完成批量创建。
内容的提问来源于stack exchange,提问作者pk_dhruv
相关产品推荐
相关产品推荐

