【发布时间】:2022-01-15 05:55:09
【问题描述】:
我正在使用 Terraform 管理我的本地 Kubernetes 集群命名空间,并希望在它们上包含一些自定义标签/注释。这是为了让审计更容易,而且我们还有依赖标签/注释的变异 webhook。
我正在尝试做这样的事情(伪代码)
resource "kubernetes_namespace" "namespaces" {
for_each = {for k, v in var.namespaces: k => v}
metadata {
name = each.value.name
annotations = {
"linkerd.io/inject" = each.value.linkerd
{{loop over each.value.custom_annotations}}
}
labels = {
"apps.kubernetes.io/app" = each.value.app
"k8s.domain.co/managed-by" = each.value.managed
"k8s.domain.co/owner" = each.value.owner
{{loop over each.value.custom.labels}}
}
}
}
我的 var.namespaces 变量构造如下
description = "List of namespaces controlled by Terraform"
type = list(object({
name = string
linkerd = string
app = string
owner = string
managed = string
custom_annotations = list(object({
label = string
value = string
}))
custom_labels = list(object({
label = string
value = string
}))
}))
我正在尝试结束
namespaces = [
{
name = foo
...
custom_annotations = {
label = "myannotation"
value = "myvalue"
custom_labels = {
label = "mylabel"
value = "myvalue"
}]
resource "kubernetes_namespace" "namespaces" {
for_each = {for k, v in var.namespaces: k => v}
metadata {
name = each.value.name
annotations = {
"linkerd.io/inject" = each.value.linkerd
myannotation = myvalue
}
labels = {
"apps.kubernetes.io/app" = each.value.app
"k8s.domain.co/managed-by" = each.value.managed
"k8s.domain.co/owner" = each.value.owner
mylabel = myvalue
}
}
}
我觉得一些本地人和动态块的混合会是解决方案,但我似乎无法以一种有效的方式将它们固定在一起
有什么建议吗?
【问题讨论】:
-
您希望在动态块内有一个嵌套迭代器,用于嵌套复杂类型结构。这是提供答案的巨大努力。值得庆幸的是,关于如何做到这一点,还有其他答案,还有这里的文档:terraform.io/docs/language/functions/… 和这里:terraform.io/docs/language/expressions/dynamic-blocks.html
标签: terraform terraform-provider-kubernetes