繁体   English   中英

Rego function 定义变量

[英]Rego function to define variables

对于多个规则,我们需要定义同一组变量。 在示例中,这些是“ns”、“externaldns”、“svc”、“nssvc”。 我们如何将这些定义从每个规则中取出,可能放入 function,然后在每个规则中只调用一次 function?

    violation[{"msg": msg}] {
      ns := input.review.object.metadata.namespace
      externaldns := input.review.object.metadata.annotations["external-dns.alpha.kubernetes.io/hostname"]
      svc := input.review.object.metadata.name
      nssvc := sprintf("%v-%v", [ns,svc])
      not startswith(externaldns, svc)
      startswith(svc, ns)
      not endswith(ns, "-system")
      msg := "some message"
    }

您可以将公共变量/规则移出规则主体,例如:

ns := input.review.object.metadata.namespace
externaldns := input.review.object.metadata.annotations["external-dns.alpha.kubernetes.io/hostname"]
svc := input.review.object.metadata.name
nssvc := sprintf("%v-%v", [ns,svc])

violation[{"msg": msg}] {
    not startswith(externaldns, svc)
    startswith(svc, ns)
    not endswith(ns, "-system")
    msg := "some message"
}

如果您想将一些移动到函数中,那也是可行的,即:

annotation(key) = value {
    value = input.review.object.metadata.annotations[key]
}

violation[{"msg": msg}] {
    externaldns := annotation("external-dns.alpha.kubernetes.io/hostname")
    # ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM