Opa Run

opa使用

opa run是OPA实现的交互式运行(REPL)命令,本地学习或者调试会很方便

run

启动一个空的交互环境:

./opa run

使用目录:

opa run quick-start

会导入目录下的文件到run环境中

主要有两类,所有quick-start目录下的

  • 配置文件(.json|.yaml|.yml) 对应的父节点是data

  • Rego文件(包括test文件) .rego文件 对应的父节点是data.<package name>

这样配置文件都挂在data这个根节点下了,如果想加载配置文件时增加父节点(如data.example.file) 该怎么办? 可以文件的路径映射前缀 opa run example.file:quick-start 注意只会改变配置文件的父节点 这一点很有用,以后讲bundle也会提到

当然也可以指定输入文件input。这个比较特殊,命令行保留了包前缀repl.input给input 可以用repl.input:<path to input.json>的方式传递输入,而避免挂载到data根节点下

opa run  quick-start  repl.input:quick-start/input.json
> data.example_rbac
{
  "allow": true,
  "role_has_permission": [
    "widget-reader"
  ],
  "user_has_role": [
    "widget-reader"
  ]
}

-w支持交互式窗口内实时文件变更reload -s支持服务常驻式启动,启动后可以REST-Api查询;

eval

opa eval是用来查询策略结果

-d 指定上下文,-i 指定输入

-f 指定返回格式,默认json,还支持values,bindings,pretty,source

opa eval -f values -d quick-start -i quick-start/input.json "data.example_rbac"

–explain=notes 配合 trace(msg) 可以调试执行过程

如下边规则增加trace(role_name)调用

allow {
  trace(role_name)
  user_has_role[role_name]
  role_has_permission[role_name]
}

–explain=notes时可以看到所有调用点note

opa eval -f pretty -d quick-start -i quick-start/input.json "data.example_rbac.allow" --explain=notes

query:1             Enter data.example_rbac.allow = _
quick-start/exa:6   | Enter data.example_rbac.allow
note                | | Note "widget-reader"
true

deps

opa deps 用来分析查询依赖

test

opa test 用来跑测试,-c支持输出覆盖率,–threshold 可指定通过覆盖率

check & fmt

opa check 是语法检查;opa fmt是格式化