# Доработка СОВЫ ## Заливка конфига Необходимо реализовать функционал заливки конфигурации на оборудовании. Просто подавать конфиг как последовательность строк нельзя, так как такой метод может привести к обрыву связи или оставить за собой мусор В зависимости от оборудования, файл конфигурации должен либо закачиваться на оборудование и применяться атомарно, либо при помощи специальных команд копируется с внешних серверов по протоколам HTTP/HTTPS, FTP, TFTP, и также атомарно применяться. Так как система поддерживает работу с пересекающимися адресными пространствами управления, необходимо иметь возможность разместить несколько provisioning cluster'ов (в вырожденном случае - по одному или более на каждый пул.) Каждый provisioning cluster состоит из frontend (в виде open-source компонент, реализующих необходимые протоколы) и backend, через который система может загружать и удалять файлы (Рассмотреть возможность использования протоколов WebDAV или S3). Процесс заливки конфига состоит из нескольких стадий: 1. Формирование файла конфига 2. Загрузка файла на provisioning cluster или на оборудование напрямую. 3. Запуск команды загрузки/активации конфига. Целесообразно реализовать загрузку через сценарии оркестратора. Необходимо реализовать: 1. Интерфейс IUploadConfig для скриптов. 2. Соотвествующие скрипты upload_config для основных платформ. 3. Разработать настройки для привязки provisioning-серверов к пулам или группам объектов. 4. Создание сценариев оркестратора для заливки конфига. 5. Кнопку в UI просмотра конфига, который заливает выбранную ревизию конфига. > 3/161 пункта требований ## Заливка софта Похож на заливку конфига, но необходимо учитывать возможные ограничения на миграции между версиями. Обновление софта также целесообразно реализовать через сценарии оркестратора. Необходимо реализовать: 1. Интерфейс IUpdateFirmware, необходимо учитывать, что прошивка может состоять из отдельных компонент, кроме того, может существовать отдельная прошивка для bootloader'а. 2. Соответсвующие скрипты update_firmware для основных платформ. 3. Реализовать коллекцию inv.firmware для переноса данных между системами. 4. Доработать структуру Firmware для описания ограничений. 5. Реализовать кнопку обновления софта в Managed Object. 6. Реализовать UI для планирования массового обновления софта. 7. Реализовать сценарии для массового обновления софта с учетом топологии. 8. На перспективу - A/B тестирование. > 12/161 пунктов требований ## NTP Diagnostics Необходимо реализовать Object Diagnostic для проверки, что на оборудовании настроена синхронизация NTP с необходимыми серверами и сессии находятся в синхронизированном состоянии. Необходимо реализовать: 1. Интерфейс IGetNTPStatus 2. Скрипты get_ntp_status для основных платформ 3. Привязку оборудования к NTP серверам (resource group?) 4. Диагностику NTP > 3/161 пункттов требований ## Фасады оборудования (сделано) Реализовать inventory plugin для просмотра фасада оборудования (включая установленные модули). Необходимо отображать вид спереди и вид сзади. Предлагается в качестве основного формата использовать SVG, на первое время для редактирования использовать Boxy SVG или Inkscape. Необходимо: 1. Описать соглашения по разметке слотов и индикаторов в общем SVG. i.e. специфичные id вроде `id="noc-slot-<name>"`. Дополнительные data attribute должны указывать ориентацию фасада вложенного объекта (одна и та же карта может стоять вертикально и горизонтально в зависимости от шасси). Отдельно описать лампочки и индикаторы. Фактически, необходим простой DSL. 2. Реализовать валидатороры, которые проверяют, что все слоты размечены 3. Реализовать виртуальные объекты - заглушки (placeholder), которые не существуют как отдельные объекты inventory, но отображаются, когда слот пуст. Возможно, что placeholder - просто фасад без объекта. 4. В секции slot объекта добавить опциональный аттрибут placeholder 5. Коллекция или пакет для фасадов, которые поставляются с системой. Перспектива: 1. Встроенный редактор фасадов. Вопросы: * Хранить в коллекциях или пакетах? * Общее со стенсилами? ## Физические карты/планы Любая группа в inventory может содержать план, состоящий из загружаемой подложки, на которой размещаются вложенные объекты. При этом должны отображаться связи между объектами. Необходимо предусмотреть фильтр показа объектов и связей по функциональным "слоям" (силовые, слаботочка, оптика, ....). Карты должны быть "живыми", то есть менять свое состояние в зависимости от метрик. Оформить в виде inventory plugin. Применения: * Функциональные схемы ad-hoc * План размещения стоек в зале Мысли: * Использовать model interface [plan](https://getnoc.com/model-interfaces-reference/plan/) ## Universal Event Logging Общая структура в ClickHouse с фиксацией значимых событий, применимо к произвольному ресурсу системы. Audit trail на стероидах. Необходиимо реализовать структуру данных и API, после чего начать расставлять события в коде. > 10/168 пунктов требований ## Cross discovery Строить link между line портами ADM на основании существующих кроссировок. ## NBI/Datastream Health endpoint @todo: Поправить Необходимо реализовать простейший NBI endpoint /api/nbi/health, который могут дергать внешние системы для проверки связности и работоспособности NBI. Запрос: ``` GET /api/nbi/healh ``` Нормальный ответ: 200 OK ``` { "status": true } ``` NB: Все-таки требуется отдавать статус сервисов