Могу ли я зациклить ключи и значения объекта в OPA для проверки, придерживаются ли они определенного формата (CamelCase) - PullRequest
0 голосов
/ 19 июня 2019

Мы используем conftest , чтобы проверить, применяется ли наш набор изменений terraform к определенным правилам и соответствию. Одна вещь, которую мы хотим проверить, заключается в том, помечены ли наши ресурсы AWS в соответствии с соглашением о тегах AWS, которое определяет определенные теги для использования (например, Owner, ApplicationRole, Project) и указывает, что все теги и значения находятся в CamelCase.

в terraform набор изменений изображается в следующем (упрощенном) выводе json:

{
   "resource_changes":{
      "provider_name":"aws",
      "change":{
         "before":{

         },
         "after":{
            "tags":{
               "ApplicationRole":"SomeValue",
               "Owner":"SomeValue",
               "Project":"SomeValue"
            }
         }
      }
   }
}

Что я сейчас пытаюсь сделать, это проверить следующее:

  1. Проверьте, установлены ли влажные теги.
  2. Проверить, если все ключи и значения имеют верблюд.
  3. Убедитесь, что ключи включают набор (ApplicationRole, Owner, Project) в минимуме.

Однако у меня возникают проблемы с определением этого в Rego (я совсем новичок в OPA).

Есть ли способ "зацикливать" ключи и значения объекта и проверять, правильно ли они отформатированы?

в псевдокоде:

for key, value in tags {
  re_match(`([A-Z][a-z0-9]+)+`, key)
  re_match(`([A-Z][a-z0-9]+)+`, value)
}

Я пробовал следующее:

tags_camel_case(tags) {
    some key
    val := tags[key]
    re_match(`^([A-Z][a-z0-9]+)+`, key) # why is key not evaluated?
    re_match(`^([A-Z][a-z0-9]+)+`, val)
}

Однако при оценке по следующему тесту json:

{
  "AppRole": "SomeValue",
  "appRole": "SomeValue"
}

правило возвращает true, хотя я проверяю и ключ, и значение в сравнении с регулярным выражением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...