首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所需参数或块定义

所需参数或块定义
EN

Stack Overflow用户
提问于 2022-07-08 04:10:57
回答 1查看 105关注 0票数 1

我正在使用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问题

代码语言:javascript
复制
│ 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

我的资源

代码语言:javascript
复制
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
          }
        }
      }       
    }    
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-08 04:19:34

您可以嵌套动态块。所以我觉得在你的情况下应该是:

代码语言:javascript
复制
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
                }              
              }              
           }
      }       
    }    
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72906548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档