从一个集合中检索一个值,其中密钥来自 Open Policy Agent (OPA) 中的另一个集合
Retrieve a value from a set where the key comes from another set in Open Policy Agent (OPA)
我已经通读了 OPA 'Policy Language' 页面,但我的问题只是得到了一定程度的解决...在这里寻找清晰度 ;)
我有两套:
"servers": {
"server1": [ "silver" ],
"server2": [ "gold" ]
}
"plan": {
"gold": [ "1000" ],
"silver": [ "100" ]
}
在我的数据部分。我需要一个规则,给定 input.server = "server2"
将 return "1000"
...所以设置查找为第二次查找提供密钥。
我正在尝试这个:
rate msg = {
p := servers[input.server]
msg := plan[p]
}
但是 OPA 吐了所有的东西。它在我看来是可行的,但在为此制定规则方面没有取得任何成功。谢谢!
servers[input.server]
将要 return 一个列表 ([ "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" }
而不是 [ ]
。
我已经通读了 OPA 'Policy Language' 页面,但我的问题只是得到了一定程度的解决...在这里寻找清晰度 ;)
我有两套:
"servers": {
"server1": [ "silver" ],
"server2": [ "gold" ]
}
"plan": {
"gold": [ "1000" ],
"silver": [ "100" ]
}
在我的数据部分。我需要一个规则,给定 input.server = "server2"
将 return "1000"
...所以设置查找为第二次查找提供密钥。
我正在尝试这个:
rate msg = {
p := servers[input.server]
msg := plan[p]
}
但是 OPA 吐了所有的东西。它在我看来是可行的,但在为此制定规则方面没有取得任何成功。谢谢!
servers[input.server]
将要 return 一个列表 ([ "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" }
而不是 [ ]
。