[英]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.