在 OPA 的文档中有很多用于生成集合/数组/对象以进行查询的示例,例如:
app_to_hostnames[app_name] = hostnames {
app := apps[_]
app_name := app.name
hostnames := [hostname | name := app.servers[_]
s := sites[_].servers[_]
s.name == name
hostname := s.hostname]
}
但是,在文档中,所有数据都是静态定义的:在示例中,变量apps
已经存在并被定义为某个 json 对象。
为了可重用性,我想定义一个返回集合/数组/对象但允许动态传递输入的函数。本质上,我想要尝试做的是以下内容:
app_to_hostnames[app_name](apps) = hostnames {
app := apps[_]
app_name := app.name
hostnames := [hostname | name := app.servers[_]
s := sites[_].servers[_]
s.name == name
hostname := s.hostname]
}
在这种情况下,应用程序作为函数输入传递。有没有办法在 Rego 政策中实现这一目标?还是我应该以不同的方式解决问题?或者有没有办法将不同的输入传递给不同的策略?
我知道您可以通过 REST API 将输入发送到特定策略并以这种方式控制它,但在这种情况下,我使用conftest将输入文档(例如 json 文件)传递给已编译的 rego 策略集)通过终端,所以使用 REST API 对我不起作用。