组合退出代码和'defined'字符串返回值从规则在Rego



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

我注意到opa eval命令的——fail和——fail-defined选项。这些选择看起来很完美。但是,返回一个字符串技术上不是'失败'或返回'未定义'。所以,对我来说,似乎不可能返回字符串错误消息以及一个非零的退出代码,同时不破坏良好的输出字符串和测试用例。

我说的对吗?有没有什么办法可以两全其美呢?我对Rego还是新手

exrego文件:

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[_]'

相关内容

  • 没有找到相关文章

最新更新