Создайте набор из цепочки элементов в 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, ",")функция, возвращающая массив элементов, но массив не может пересекаться с набором. Есть ли какой-нибудь умный способ сгенерировать набор из строки вместо массива?

1 ответ

Решение

Уловка состоит в том, чтобы использовать установленное понимание:

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]
}
Другие вопросы по тегам