Статус: Draft Дата: 2026-04-29 Роль: source of truth для ресурсов, topology, relationships, desired/observed state, health и provided capabilities.
1. Назначение
resource-catalog-service отвечает на вопрос "что у нас есть". Он хранит канонический каталог инфраструктурных и платформенных ресурсов, их связи, состояние и capabilities.
Сервис не исполняет долгие операции. Он не создает Kubernetes-кластер, не запускает Ansible, не делает Helm install и не принимает решения о retry/rollback. Для этого существует control-plane-service и execution-plane-service.
2. Граница ответственности
Владеет:
- organizations / tenant context для platform resources;
- topology: regions, datacenters, layers, segments;
- compute nodes;
- clusters;
- internal/external services;
- deployments;
- managed resources: postgres, redis, tempo, minio, vault, kafka и другие;
- resource relationships;
- desired state и observed state ресурсов;
- lifecycle status и health summary;
- capability definitions;
- provided capabilities;
- read models для UI: resource graph, topology graph, capability graph.
Не владеет:
- intents;
- scenarios;
- plans;
- operations;
- gates;
- interventions;
- PlanPatch;
- execution attempts;
- raw runner logs;
- secrets.
3. Модули
1 2 3 4 5 | |
Подробно: Modules.
4. Основной data flow
flowchart TB
UI[Web App] --> API[api]
CP[control-plane-service] --> API
OBS[observer] --> API
KAFKA[(Kafka)] --> Worker[worker]
Worker --> DB[(resource_catalog_db)]
API --> DB
OBS --> DB
DB --> Projector[projector]
Projector --> ReadModels[read models]
API --> ReadModels
5. Инварианты
- Сервис является единственным владельцем resource metadata и provided capabilities.
- Сервис не владеет operation lifecycle.
- Сервис не исполняет side-effect jobs.
- Все изменения ресурсов должны быть versioned, чтобы команды от control-plane могли использовать optimistic concurrency.
- Observed state не должен перезаписывать desired state.
- Health summary должен ссылаться на evidence/operation references, если состояние пришло из control-plane.
- CapabilityDefinition является ресурсной онтологией и живет здесь.
- ProvidedCapability должен ссылаться на concrete resource.