我正在使用kubernetes_network_policy资源。我有大约十个网络诗篇,每个都是不同的。我希望只有当我将一个值传递给from cidr时才执行ingress_to_cidr块。当我尝试执行terragrunt apply时,它错误地说是failed to expand IPBlock: null or empty input,但是terragrunt plan工作得很好。因此,我试图在from cidr块周围使用if语句,以查看在不向ingress_to_cidr传递任何值的情况下是否超过了IPblock问题
│ Error: Argument or block definition required
│
│ on main.tf line 37, in resource "kubernetes_network_policy" "example-policy":
│ 37: length(var.ingress_to_cidr) != 0 ? 0 : from {
│
│ An argument or block definition is required here. To set an argument, use
│ the equals sign "=" to introduce the argument value.
╵
ERRO[0004] 1 error occurred:
* exit status 1我的资源
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 "ingress" {
for_each = each.value.egress_number == null ? [] :range(length(each.value.ingress_number))
content {
ports {
port = each.value.ingress_number[ingress.value]
protocol = each.value.ingress_protocol[ingress.value]
}
length(var.ingress_to_cidr) == null ? [] : from {
ip_block {
cidr = each.value.ingress_to_cidr
}
}
}
}
dynamic "egress" {
for_each = each.value.egress_number == null ? [] : range(length(each.value.egress_number))
content {
ports {
port = each.value.egress_number[egress.value]
protocol = each.value.egress_protocol[egress.value]
}
length(var.ingress_to_cidr) == null ? [] : to {
ip_block {
cidr = each.value.egress_to_cidr
}
}
}
}
}
}发布于 2022-07-08 04:19:34
您可以嵌套动态块。所以我觉得在你的情况下应该是:
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 "ingress" {
for_each = each.value.egress_number == null ? [] : range(length(each.value.ingress_number))
content {
ports {
port = each.value.ingress_number[ingress.value]
protocol = each.value.ingress_protocol[ingress.value]
}
dynamic "from" {
for_each = each.value.ingress_to_cidr == null ? [] : [each.value.ingress_to_cidr]
content {
ip_block {
cidr = from.value
}
}
}
}
}
dynamic "egress" {
for_each = each.value.egress_number == null ? [] : range(length(each.value.egress_number))
content {
ports {
port = each.value.egress_number[egress.value]
protocol = each.value.egress_protocol[egress.value]
}
dynamic "from" {
for_each = each.value.egress_to_cidr == null ? [] : [each.value.egress_to_cidr]
content {
ip_block {
cidr = from.value
}
}
}
}
}
}
}https://stackoverflow.com/questions/72906548
复制相似问题