Files
IoT/doc/decisions/2026-04-12-separate-repo.md

1.8 KiB

Решение: Вынос IoT в отдельную репу

Дата: 2026-04-12 Статус: Принято и реализовано

Контекст

IoT managed service был частью sless (основной serverless operator). Код IoT жил в нескольких местах:

  • iot/ — CRD types, controller, cmd (bridge, consumer)
  • internal/storage/iotpg/ — Postgres store
  • internal/api/handler/iot_*.go — REST handlers
  • internal/api/ui/iot-*.html — UI
  • main.go, Dockerfile — IoT интегрирован в основной бинарник

Проблемы

  1. IoT и sless — разные домены с разными циклами разработки
  2. Сборка sless включала IoT — лишние зависимости (Kafka, MQTT)
  3. Деплой любого IoT изменения требовал пересборки всего sless

Решение

Вынести IoT в отдельную репу gitea.services.ngcloud.ru/Nail/IoT:

  • Свой Go модуль, go.mod, Dockerfile
  • 3 бинарника в одном образе (naeel/iot-operator)
  • Свой controller-manager + REST API (cmd/iot-operator)
  • Независимый CI/CD цикл

Что перенесено

  • CRD types, controller, mqtt-bridge, kafka-consumer — as-is
  • Handler struct упрощён (убраны S3, PG от sless)
  • Router — только IoT маршруты
  • Middleware (auth, logging) — скопированы как есть
  • K8s manifests, CRD YAML, документация, примеры

Риски

  • IoT код в sless нужно будет убрать (или оставить заглушки)
  • K8s manifests могут требовать обновления (новое имя образа)