从 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]
}