这里需要一个参数或块定义



我正在使用kubernetes_network_policy资源。我正在尝试在端口上循环并得到这个问题。

╷
│ Error: Argument or block definition required
│
│   on main.tf line 16, in resource "kubernetes_network_policy" "example-policy":
│   16:     { for i in range(length(val.egress_number)):
│
│ An argument or block definition is required here.

我资源

resource "kubernetes_network_policy" "example-policy" {
for_each = var.inputs
metadata {
name      = each.value.name
namespace = each.value.namespace
}
spec {
pod_selector {
match_labels = {
app = each.value.selector
}
}
policy_types = each.value.policy
egress {
{ for i in range(length(egress_number)):
ports {
port     = egress_number[i]
protocol = egress_protocol[i]
}
}
to {
namespace_selector {
match_labels = {
app = each.value.egress_label
}
}
}
}
}
}

我varibale.tf

variable "inputs" {
type = map(object({
name            = string
namespace       = string
selector        = string
policy          = list(string)
egress_number   = list(string)
egress_protocol = list(string)
egress_label    = string
}))
default = {}
}

我tfvars

inputs = {
app = {
name           = "nignx"
namespace       = "default"
selector        = "nignix-app"
policy          = ["Egress"]
egress_label    = "play"
egress_number   = ["443", "8080"]
egress_protocol = ["TCP", "TCP"]
}
}

你必须使用动态块:

resource "kubernetes_network_policy" "example-policy" {
for_each = var.inputs
metadata {
name      = each.value.name
namespace = each.value.namespace
}
spec {
pod_selector {
match_labels = {
app = each.value.selector
}
}
policy_types = each.value.policy

dynamic "egress" {

for_each = range(length(each.value.egress_number))

content {
ports {
port     = each.value.egress_number[egress.value]
protocol = each.value.egress_protocol[egress.value]
}

to {
namespace_selector {
match_labels = {
app = each.value.egress_label
}
}
} 
}       
}    
}
}

除了使用rangelength,您还可以使用zipmap。

最新更新