在Open Policy Agent(OPA)中通过集合取值作为另一集合键检索数据
OPA嵌套检索规则实现方案
报错根因
- 你定义的
servers、plan对象的所有值均为数组结构,你编写的规则直接将数组作为key检索plan,不符合Rego语法要求 - 规则定义外层的大括号属于冗余写法,不符合Rego规则的标准格式
正确规则代码
# 替换为你实际使用的包名 package demo default rate = "" rate = msg { # 第一步:取出server对应plan类型数组的第一个元素,得到字符串类型的plan key p := servers[input.server][0] # 第二步:用plan key检索对应额度数组,取第一个元素得到最终值 msg := plan[p][0] }
运行效果验证
传入参数input.server = "server2"时,规则返回结果为"1000",完全匹配你的需求。
如果你的实际业务场景中单个server可能对应多个plan类型,可以调整规则用遍历逻辑输出多值结果,当前实现针对你给出的单值数组场景可直接使用。
内容的提问来源于stack exchange,提问作者JD Allen
相关产品推荐
相关产品推荐

