Terraform nginx 入口动态 for_each 规则主机
Terraform nginx ingress dynamic for_each rules host
正在尝试创建我之前在入口 yaml 文件中拥有的动态主机规则。主要区别 TF 没有 'rules' 他们只有一个 'rule',但我认为这只是一个命名转换。目前我正在为每个项目创建一个入口,但我想做一个动态规则。我知道动态必须在 resource/data/etc 中。我将如何做到这一点? (不是工作示例)
resource "kubernetes_ingress" "test" {
wait_for_load_balancer = false
metadata {
name = "my-test-${each.value}"
namespace = kubernetes_namespace.test.metadata.0.name
annotations = {
"kubernetes.io/ingress.class" = "nginx"
}
}
spec {
dynamic "rule" {
for_each = toset(var.types)
content {
host = "${each.value}.test.mydomain.com"
http {
path {
path = "/"
backend {
service_name = kubernetes_service.test[each.value].metadata.0.name
service_port = 8080
}
}
}
}
}
}
}
当您使用 dynamic blocks 时,您必须使用 rule
,而不是 each
来引用 for_each
中的项目:
resource "kubernetes_ingress" "test" {
#..
spec {
dynamic "rule" {
for_each = toset(var.types)
content {
host = "${rule.value}.test.mydomain.com"
http {
path {
path = "/"
backend {
service_name = kubernetes_service.test[rule.value].metadata.0.name
service_port = 8080
}
}
}
}
}
}
正在尝试创建我之前在入口 yaml 文件中拥有的动态主机规则。主要区别 TF 没有 'rules' 他们只有一个 'rule',但我认为这只是一个命名转换。目前我正在为每个项目创建一个入口,但我想做一个动态规则。我知道动态必须在 resource/data/etc 中。我将如何做到这一点? (不是工作示例)
resource "kubernetes_ingress" "test" {
wait_for_load_balancer = false
metadata {
name = "my-test-${each.value}"
namespace = kubernetes_namespace.test.metadata.0.name
annotations = {
"kubernetes.io/ingress.class" = "nginx"
}
}
spec {
dynamic "rule" {
for_each = toset(var.types)
content {
host = "${each.value}.test.mydomain.com"
http {
path {
path = "/"
backend {
service_name = kubernetes_service.test[each.value].metadata.0.name
service_port = 8080
}
}
}
}
}
}
}
当您使用 dynamic blocks 时,您必须使用 rule
,而不是 each
来引用 for_each
中的项目:
resource "kubernetes_ingress" "test" {
#..
spec {
dynamic "rule" {
for_each = toset(var.types)
content {
host = "${rule.value}.test.mydomain.com"
http {
path {
path = "/"
backend {
service_name = kubernetes_service.test[rule.value].metadata.0.name
service_port = 8080
}
}
}
}
}
}