opa - 从一个集合中检索一个值,其中密钥来自开放策略代理 (OPA) 中的另一个集合
问题描述
我已通读 OPA 'Policy Language' 页面,但我的问题只是解决了......在这里寻找清晰;)
我有两套:
"servers": {
"server1": [ "silver" ],
"server2": [ "gold" ]
}
"plan": {
"gold": [ "1000" ],
"silver": [ "100" ]
}
在我的数据部分。我需要一个给定的规则input.server = "server2"
将返回"1000"
......所以一个为第二次查找提供密钥的集合查找。
我正在尝试这个:
rate msg = {
p := servers[input.server]
msg := plan[p]
}
但是 OPA 到处都是。在我看来它是可行的,但在为此制定规则方面没有任何成功。谢谢!
解决方案
servers[input.server]
将返回一个列表 ( [ "1000" ]
) 而不是"1000"
,因此如果要将其用作在plan
对象中查找的键,则需要将项目从列表中取出。此外,该rate
规则有一些语法错误。这应该有效:
servers := {
"server1": ["silver"],
"server2": ["gold"]
}
plan := {
"gold": ["1000"],
"silver": ["100"]
}
rate = msg {
p := servers[input.server][0]
msg := plan[p]
}
最后,并不意味着挑剔:),但您的数据中没有任何集合- 只有列表和地图。使用大括号,即{ "1000" }
,[ ]
如果你想要那些。
推荐阅读
- python - 从 3 个列表中创建数据框/numpy 数组
- c# - Whats does the build action "Content" do?
- android - how we can pass data on selected itemView in recylerView
- javascript - 解析无法检索用户电子邮件
- gnuplot - 使用 pm3d 设置 gnuplot 曲面图的截止值
- swift - 如何执行没有/不需要响应正文的 URLRequest?
- css - 再次单击时如何关闭手风琴菜单
- python - Python CSV 解析“§”字符
- angular - 单击 Microsoft Edge 中的按钮时 Angular 应用程序重新启动
- javascript - 在模态中保持制表符 - :first-child 和 :last-child 伪选择器关系