Что я пытаюсь сделать?
Я хочу создать объект кубернет сервис с помощью terraform, но сделать его пригодным для повторного использования. Поэтому каждый раз, когда появляется новая служба, я могу просто добавлять переменные.
Моя проблема:
Я читал и пробовал разные вещи, но я не уверен, как мне перебирать «аннотации» и «селекторы», которые будут иметь более одной пары значений ключа.
Пример кода
Variables.tf, с помощью которого я хочу построить фактический ресурс терраформирования.
variable "apps" {
default = {
"app1" = {
svc_name = "app1"
namespace = "testns"
annotations = {
"testannotation" = "ann1"
}
selector = {
app = "podinfo"
env = "dev"
}
ports = {
name = "http"
port = 80
protocol = "TCP"
targetPort = 8008
}
},
"app2" = {
svc_name = "app2"
namespace = "testns"
annotations = {
"testannotation" = "ann1"
}
selector = {
app = "someapp"
env = "qa"
}
ports = {
name = "http"
port = 8080
protocol = "TCP"
targetPort = 8080
}
},
}
}
Вот main.tf, где я хочу перебрать «аннотации» и «селекторы» переменных, потому что их может быть больше одной. НО есть только один блок "аннотации" и "селектор". Поэтому я не мог использовать «динамический», так как он будет генерировать многие из этих блоков.
resource "kubernetes_service" "service" {
for_each = var.apps
metadata {
name = each.value.svc_name
namespace = each.value.namespace
# annotations = {
# HOW DO I GET THE ANNOTATIONS HERE
# }
}
spec {
selector = {
## HOW DO I GET THE SELECTORS FROM VARIABLEES HERE
}
session_affinity = "ClientIP"
port {
port = each.value.ports.port
target_port = each.value.ports.targetPort
}
type = "ClusterIP"
}
}
Я был бы признателен за любое руководство, ссылки или предложения здесь!
спасибо @Marcin, это прокомментированная часть в main.tf с «аннотациями»
Я тоже не вижу здесь никаких проблем. Мне было бы любопытно, какие проблемы вы предвидите или испытали.
Вы делаете то же самое, что и с другими свойствами:
resource "kubernetes_service" "service" {
for_each = var.apps
metadata {
name = each.value.svc_name
namespace = each.value.namespace
annotations = each.value.annotations
}
spec {
selector = each.value.selector
session_affinity = "ClientIP"
port {
port = each.value.ports.port
target_port = each.value.ports.targetPort
}
type = "ClusterIP"
}
}
Что не так с кодом? Есть ошибки?