Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • N noc
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 464
    • Issues 464
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 26
    • Merge requests 26
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
    • Test cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Terraform modules
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • noc
  • noc
  • Issues
  • #1581

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, искомый профиль найден.
      • Если заданы метки, то проверяем, что они все матчатся с эффективными метками объекта. Если достигнуто полное совпадение, то искомый профиль найден

Динамическая классификация срабатывает на 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

В случае использования ресурсных групп без меток профиль назначается по совпадению.

Edited Jul 07, 2021 by Andrey Vertiprahov
Assignee
Assign to
Time tracking