Мы используем 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"
}
}
}
}
}
Что я сейчас пытаюсь сделать, это проверить следующее:
- Проверьте, установлены ли влажные теги.
- Проверить, если все ключи и значения имеют верблюд.
- Убедитесь, что ключи включают набор (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, хотя я проверяю и ключ, и значение в сравнении с регулярным выражением