Есть одна база правил, которая тихонько выходит из-под контроля. Правила — это цепочка вида
- условие1
действие
- условие2
действие
- условие3
…
Цепочка просматривается сверху вниз, если правило подошло, выбирается действие и поиск завершается.
Правило это набор сопоставлений с образцом с помощью регулярных выражений метка1 =~ регулярка1, метка2 =~ регулярка2
.
Всё вроде хорошо, но когда правил много и условия замысловатые, возникает риск ошибок.
Пример1:
- match: '{environment =~ ".*"}'
action: discard
- match: '{name="SuperProduct"}
action: pass
Второе правило никогда не сработает. Дополнительно, я обладаю некоей метаинформацией. В частности, окружения всегда именуются как Stage-Name-Region
, где stage — dev|staging|prod
, name — алфавитно-цифровые символы, region - доступные AWS’s regions. Также, известно, что все prod
окружения находятся в европейских регионах. Поэтому
Пример2:
- match: '{environment =~ "prod.*"}'
action: pass
- match: '{environment =~ ".*-eu-central.*"}
action: pass
правила очевидно дублируют друг-друга и их можно упростить.
В голове крутится пара эвристик, но нет ничего практичнее хорошей теории. Вдруг человечество уже наработало нечто, что позволяет сравнивать регулярки, классифицировать их по принципу: одна включают другую, регулярки соответствуют одним и тем же строкам, регулярки разные. Пока непонятно даже какие слова в поиск вбивать. Нужна помощь.