Как сделать || "б" в рего - PullRequest
       23

Как сделать || "б" в рего

3 голосов
/ 10 января 2020

мы проверяем объекты с пространствами имен и без них, и я всегда хочу напечатать, что является текущим пространством имен ... но отступить на "" или другое значение по умолчанию, когда пространство имен не установлено.

с использованием наивного input.review.object.metadata.namespace напрямую не соответствует правилу, поэтому я прибегнул к

namespace := [input.review.object.metadata.namespace | ""]

, который печатает массив, довольно уродливо, но это работает ... есть ли лучшее решение?

1 Ответ

3 голосов
/ 10 января 2020

Для него нет подходящего оператора, хотя обсуждается вопрос о его добавлении.

Как правило, шаблон заключается в использовании вспомогательного правила / функции, которая имеет метод доступа, и отрицательного значения по умолчанию. , Например:

https://play.openpolicyagent.org/p/RhZVyJjqOJ Uses ..

# If the namespace exists, use it
input_namespace = ns {
    ns := input.review.object.metadata.namespace
}

# or if it doesn't, use the string defined here
input_namespace = "whatever-default-value-i-want" {
    not input.review.object.metadata.namespace
}

Этот же шаблон можно увидеть и в дикой природе, например, в библиотеке Gatekeeper: https://github.com/open-policy-agent/gatekeeper/blob/master/library/general/requiredlabels/src.rego#L3 -L10

...