从 Rego 中的一串元素创建一个集合
Create a set from a string of elements in Rego
如何使用 Rego Open Policy Agent 语言从字符串创建集合?
我有一串像 "values": "pvc-volume,emptydir-volume,hostPath,ConfigMaps"
这样的元素,需要根据一组给定的允许值验证这些元素
valid_backup_profiles := {
"pvc-volume",
"emptydir-volume"
}
例如使用交集
valid_backup_profiles & elements_coming_from_string_above
我知道 split(string, ",")
函数返回一个元素数组,但该数组不能与集合相交。有什么聪明的方法可以从字符串而不是数组生成集合吗?
诀窍是使用 set comprehension:
s := {x |
some i
parts := split(string, ",")
x := parts[i]
}
如果你愿意,你可以像这样在一行中完成:
s := {x | x := split(string, ",")[_]}
显然这很好而且紧凑,但上面的表格更容易阅读。如果想让逻辑可以复用,定义一个函数即可:
split_csv_set(str) = {x |
some i
parts := split(str, ",")
x := parts[i]
}
如何使用 Rego Open Policy Agent 语言从字符串创建集合?
我有一串像 "values": "pvc-volume,emptydir-volume,hostPath,ConfigMaps"
这样的元素,需要根据一组给定的允许值验证这些元素
valid_backup_profiles := {
"pvc-volume",
"emptydir-volume"
}
例如使用交集
valid_backup_profiles & elements_coming_from_string_above
我知道 split(string, ",")
函数返回一个元素数组,但该数组不能与集合相交。有什么聪明的方法可以从字符串而不是数组生成集合吗?
诀窍是使用 set comprehension:
s := {x |
some i
parts := split(string, ",")
x := parts[i]
}
如果你愿意,你可以像这样在一行中完成:
s := {x | x := split(string, ",")[_]}
显然这很好而且紧凑,但上面的表格更容易阅读。如果想让逻辑可以复用,定义一个函数即可:
split_csv_set(str) = {x |
some i
parts := split(str, ",")
x := parts[i]
}