Dynamic Profile Classification
Часто возникает задача автоматической простановки профиля для модели по ее данным. На настоящий момент оно реализовано для интерфейсов (Interface Classification Rule). На практике также часто необходимо назначить профили для Managed Object.
Представляется логичным реализовать общий механизм динамической классификации для всех моделей, поддерживающих групповые настройки через профили.
Предлагаемое решение
Классификация осуществляется только по меткам, при этом можно использовать wildcard labels (#1522 (closed)) и match labels (#1565 (closed)). Для того, чтобы не вводить дополнительных сущностей, правила классификации располагаются непосредственно в профилях.
В профилях добавляются поля:
-
dynamic_order
- порядок обработки правил. 0 - правило отключено, далее - по приоритет по возрастанию -
match_rules
- список правил-
labels
- список меток для матчинга -
handler
- handler для матчинга
-
Порядок классификации:
- Профили с ненулевым dynamic_order обрабатывают в порядке возрастания.
- При этом проверяется каждое отдельное правило из match rules.
- Если задан handler, передаем в него эффективные метки. В случае возврата
True
, искомый профиль найден. - Если заданы метки, то проверяем, что они все матчатся с эффективными метками объекта. Если достигнуто полное совпадение, то искомый профиль найден
- Если задан handler, передаем в него эффективные метки. В случае возврата
- При этом проверяется каждое отдельное правило из match rules.
Динамическая классификация срабатывает на save. Код для динамической классификации добавляется в модель (не в профиль)
декоратором @dynamic_classification
.
Handler API
def handler(labels: List[str]) -> boolean: ...
с флагом enable_dynamic_profile
Настройки классификации
В части случаев при назначении профиля может понадобится не проводить классификацию в дальнейшем (например, если профиль предназначен для назначения вручную). Поэтому в профили необходимо добавить политику для исключения устройства из механизма автоматической классификации.
-
Dunamic Classification Policy
- Disable
- Enable
Расширение effective_labels из связанных моделей
В правилах классификации для Интерфейсов
помимо собственных меток понадобятся метки устройства. Сейчас используется Селектор
он может быть заменён либо на ресурсную группу, либо на метки устройства.
Ресурсные группы в условиях классификации
В качестве дополнительного условия можно добавить в Правило ресурсную группу (Resource Group
) это позволит более гибко назначать профили по вхождению в ресурсную группу. Необходимо добавить 2 поля:
match_static_client_groups
match_static_service_groups
В случае использования ресурсных групп без меток профиль назначается по совпадению.