繁体   English   中英

结合 Rego 中规则的退出代码和“已定义”字符串返回值

[英]Combining exit codes and 'defined' string return values from rules in Rego

当我的策略失败时,我想返回一个非零退出代码,以便我的 CI/CD 构建规范停止构建。 我还想从我的规则中返回一个字符串错误消息。

我注意到 opa eval 命令的 --fail 和 --fail-defined 选项。 这些选项看起来很完美。 但是,从技术上讲,返回字符串并不是“失败”或返回“未定义”。 因此,在我看来,如果不破坏良好的输出字符串和测试用例,就不可能返回字符串错误消息和非零退出代码。

我在这里正确吗? 有什么办法可以两全其美? 我还是 Rego 的新手

前 rego 文件:

package play

default hello := "hello failed"

hello := "hello passed" {
     input.message == "world"
}

输入: {"message": "world"}

运行以下命令将返回非零退出代码,无论opa eval -i .\input.json -d .\test_rego.rego 'data.play.hello' --fail-defined -f raw

同样,下面的命令也无济于事,因为在这种情况下,结果总是定义为opa eval -i .\input.json -d .\test_rego.rego 'data.play.hello' --fail -f raw

任何帮助表示赞赏

这是一个有趣的案例。 通常,您将使用布尔规则,或者在您想要返回例如消息部分设置规则的情况下,您可以测试是否为空。 如果您真的想为失败和成功案例返回一个字符串,您可以使用not来实现:

opa eval -d test_rego.rego -i input.json --fail 'not data.play.hello == "hello passed"'

如果使用部分规则,即:

hello["hello passed"] {
     input.message == "world"
}

您可以在规则上测试迭代以检查是否为空:

opa eval -d play.rego --fail 'data.play.hello[_]'

暂无
暂无

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

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