首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这里需要一个参数或块定义。

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

Stack Overflow用户
提问于 2022-07-07 04:32:34
回答 1查看 76关注 0票数 1

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

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

我的资源

代码语言: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

    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
          }
        }
      }
    }
  }
}

My varibale.tf

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

代码语言:javascript
复制
  inputs = {
    app = {
      name           = "nignx"
      namespace       = "default"
      selector        = "nignix-app"
      policy          = ["Egress"]
      egress_label    = "play"
      egress_number   = ["443", "8080"]
      egress_protocol = ["TCP", "TCP"]
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-07 04:43:41

你必须使用动态块

代码语言: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 "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不同,在您的情况下也可以使用拉链图

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72892316

复制
相关文章

相似问题

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