在conftest中使用opa http.send

问题描述

使用 conftest 时,我对数据导入和内置opa函数的执行有疑问。在下面的代码示例中,我有两个模块abcmain。我方便地省去了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