Skip to content
GitLab
Projects Groups 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
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 445
    • Issues 445
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 28
    • Merge requests 28
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • 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
Closed
Open
Issue created Apr 30, 2021 by Dmitry Volodin@dvOwner

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