2

我正在学习 OPA 和 rego。我正在尝试编写一个简单的策略并通过 VSCode 插件对其进行评估。

文件夹结构:

在此处输入图像描述

学习.rego

package learning

test {
    a := "test"
    a == "test"
}

输入.json

{}

当我从命令面板中选择“OPA:评估选择”选项时,我收到以下错误。

{
  "errors": [
    {
      "message": "expected body but got *ast.Package"
    }
  ],
  "metrics": {
    "timer_rego_load_bundles_ns": 919639,
    "timer_rego_module_compile_ns": 481890,
    "timer_rego_module_parse_ns": 55722,
    "timer_rego_query_parse_ns": 22773
  }
}

但是相同的策略在 rego 操场上按预期工作,并按预期评估为“真”。我在这里想念什么?

4

1 回答 1

1

尝试运行“评估包”而不是“评估选择”,它应该可以工作。

VSCode 的 Open Policy Agent 扩展提供了三种评估 Rego 代码的方法:

  1. 评估包

这似乎是你想要的。这会将选定的 Rego 代码解析为整个包。它期望选择以包声明开始(例如package learning)。如果您选择整个 Rego 包并运行“评估包”,它应该可以工作。

  1. 评估选择

此选项评估Rego 包的一部分,因此它希望选择以 Body 开头(例如您的test定义)。如果您只是选择test及其定义,它应该可以工作。

  1. 部分评估选择

最后一个选项有点复杂。本质上,它不是评估策略,而是返回满足策略的条件。这对于为外部数据存储构建查询或与复杂数据交互很有用。

于 2021-06-07T16:33:51.987 回答