问题描述
使用 conftest 时,我对数据导入和内置opa函数的执行有疑问。在下面的代码示例中,我有两个模块abc
和main
。我方便地省去了abc
的一些设置,这很重要,因为这是一个有效的https调用。
从repl开始工作,我的代码将按照我的预期执行,立即获取数据,即available
,并检查stuff
是否在该列表中。 opa run -b .
然后点击data.abc
会执行https调用,即,我可以看到数据包离开了我的接口,并且包含了所需列表的响应正文被拉入。然后我从deny
获得了预期的结果。运行opa test . -v
时也会发生同样的事情。
无论如何运行conftest verify -p .
或 conftest test abc/main.json -p .
都不会执行http.send
,即数据包永远不会离开我的接口到达预期的主机。
我可以使用静态列表,而不使用https调用,但是我无法控制列表的更新时间。这是conftest的预期/预期限制吗?我可以执行这些功能来构建我的数据文档并正确导入吗?
package abc
available = http.send(
{
"method": "get","url": request.url,"headers": headers
}
)
package main
import data.abc.available
deny[msg] {
stuff := input.stuff
not available.body[stuff]
msg := sprintf("%v is not available",[stuff])
}
解决方法
我感觉。 https://gist.github.com/b0bu/67d60fc0dbc5a9ae36406188117dfb36
问题是import data.token as auth
auth
未定义,扩展 subsciptionid 从未填充。这在 opa run -b .
中有效,因为数据文档的结构略有不同。 data.token.stuff
在 conftest 中被翻译为 data.stuff
。