# Зависимости облачных сервисов каталога DEV Промежуточная инвентаризация для будущего общего графа. Источник — YAML-контракты в `generated/dev/resources_yaml`. Вершина — сервис каталога. Направление будущей стрелки: `потребитель -> зависимость`. В таблицу зависимостей включены только связи, явно подтверждённые полем `ref_svc_id` или тем же контрактом сервиса. ## Все сервисы каталога | ID | Сервис | YAML | |---:|---|---| | 1 | Болванка | `1_dummy.yaml` | | 2 | Темплейт k8s | `2_template.yaml` | | 12 | S3 Object Storage | `12_s3.yaml` | | 13 | S3 бакет | `13_s3bucket.yaml` | | 19 | Организация в Cloud Director | `19_vc_org.yaml` | | 21 | Виртуальный датацентр (vDC) | `21_vc_vdc.yaml` | | 22 | Сетевой шлюз периметра (Edge) | `22_vc_nsxt.yaml` | | 25 | Публичные IP адреса | `25_vcexternalip.yaml` | | 26 | Виртуальный каталог ВМ (vApp) | `26_vapp.yaml` | | 28 | Виртуальная машина | `28_vc_vm_v3.yaml` | | 29 | Группа датацентров | `29_vc_vdc_group.yaml` | | 50 | Nextcloud | `50_nextcloud.yaml` | | 81 | Apache Superset | `81_superset.yaml` | | 82 | Container Registry | `82_harbor.yaml` | | 86 | Velero | `86_k8s_velero.yaml` | | 87 | Valkey | `87_k8svalkey.yaml` | | 88 | k8sZitiController | `88_k8s_ziti_controller.yaml` | | 89 | Web-сервер с фреймворком Flask | `89_flask.yaml` | | 90 | PostgreSQL | `90_postgres.yaml` | | 91 | Redis | `91_redis.yaml` | | 92 | MongoDB | `92_mongodb.yaml` | | 93 | RabbitMQ | `93_rabbitmq.yaml` | | 94 | Lucee | `94_lucee.yaml` | | 95 | NodeJS | `95_nodejs.yaml` | | 96 | pgAdmin | `96_pgadmin.yaml` | | 97 | NodeRed | `97_nodered.yaml` | | 98 | Простой HTTP контейнер | `98_http.yaml` | | 99 | Gitea | `99_gitea.yaml` | | 109 | Управление DNS | `109_zones_v2.yaml` | | 111 | DNS запись | `111_dnsrecord.yaml` | | 115 | Mariadb | `115_mariadb.yaml` | | 116 | ApacheKafka | `116_kafka.yaml` | | 119 | Akhq | `119_akhq.yaml` | | 120 | ClickHouse | `120_clickhouse.yaml` | | 148 | Менеджмент Kubernetes кластер Штурвал | `148_vc_mgmt_sthutrval_cluster.yaml` | | 149 | VALO Cloud | `149_valo_tenant.yaml` | | 150 | Kubernetes кластер Штурвал | `150_k8s_sthutrval_cluster.yaml` | | 151 | Vault | `151_k8s_openbao.yaml` | | 153 | Nifi | `153_nifi.yaml` | | 163 | ML Улей | `163_llm_ai.yaml` | ## Подтверждённые зависимости | ID | Потребитель | Зависимость | Поле связи | Смысл связи | |---|---|---|---|---| | D-01 | DNS запись (111) | Управление DNS (109) | `zoneUid` | запись создаётся в DNS-зоне | | D-02 | S3 бакет (13) | S3 Object Storage (12) | `s3UserUid` | бакет создаётся для корневой S3-услуги | | D-03 | Виртуальный датацентр (21) | Организация в Cloud Director (19) | `organizationUid` | vDC принадлежит организации | | D-04 | Сетевой шлюз периметра (22) | Виртуальный датацентр (21) | `vdcUid` | Edge привязывается к vDC | | D-05 | Сетевой шлюз периметра (22) | Группа датацентров (29) | `vdcGroupUid` | альтернативная привязка Edge к группе vDC (vdcType=vdcGroup) | | D-06 | Виртуальный каталог ВМ (26) | Сетевой шлюз периметра (22) | `nsxtUid` | vApp использует Edge для сети | | D-07 | Виртуальный каталог ВМ (26) | Виртуальный датацентр (21) | `vdcUid` | vApp размещается в vDC | | D-08 | Виртуальная машина (28) | Виртуальный каталог ВМ (26) | `vappUid` | VM размещается в vApp | | D-09 | Группа датацентров (29) | Виртуальный датацентр (21) | `vdcUid` | группа объединяет vDC (create и add_vdc) | | D-10 | Akhq (119) | ApacheKafka (116) | `kafkaUid` | UI подключается к Kafka-кластеру | | D-11 | Container Registry (82) | S3 Object Storage (12) | `s3Uid` | registry использует S3 для хранения | | D-12 | Gitea (99) | PostgreSQL (90) | `psqlUid` | Gitea использует PostgreSQL | ## Переиспользование существующих инстансов Зависимости (кроме Организации) являются ссылками на **существующие инстансы** через UUID: - Новую ВМ (28) можно создать в уже существующем vApp, vDC, Edge — ссылкой `vappUid`/`vdcUid`/`nsxtUid`. - Edge (22) можно переиспользовать, если он привязан к нужному vDC или groupvDC. - Для Штурвала (150) переиспользуемый Edge должен иметь включённый ALB и `virtualServicesCount >= 3`. - Внешние IP резервируются только после: Организация + vDC + Каталог (vApp) + Edge (по `25_vcexternalip.yaml`, `service_man`). ## Где выделяются ресурсы (CPU / RAM / Storage / IP) | Элемент | Где задаётся | Параметр(ы) | |---|---|---| | Пул CPU/RAM/Storage организации | vDC (21) create/modify | `cpuAllocated`, `memAllocated`, `storageConfig` (+ разовый `cpuGuaranteed` 0/50/80) | | Запрос ресурсов нод Штурвала | Кластер Штурвал (150) | `controlPlaneConfiguration.sizingPolicy/sizingDisk/count`, `workerConfiguration…` (политики из vDC) | | Запрос ресурсов ВМ | Виртуальная машина (28) | `vmCpu`, `vmRam`, `vmDisk` (доп. диск) | | Внешние IP | vcOrg (19) `modify` (`vIPConfigure`) или `vcexternalip` (25) | `ipSpaceName`, квота адресов | | SNAT-правило | Edge (22) `modify` | `ipSpaceName` | | DNAT/SNAT-правила адреса | Публичные IP (25) | `dnatCreate`/`snatCreate`, `internalAddrAccess`, `internalPortAccess` | ## Чек-лист создания Штурвала (150) — по `service_man` 1. Организация (19) — create. 2. vDC (21) — create, выделить ресурсы под все ноды. 3. Edge (22) — create, включить ALB и `virtualServicesCount >= 3`. 4. Внешние адреса в организации — vcOrg `modify`, суммарно 3 адреса. 5. SNAT — Edge `modify`, выбрать `ipSpaceName`. 6. Кластер Штурвал (150) — create (требует `vdcUid` и `nsxtUid`). ## Чек-лист создания ВМ (28) — по create-параметрам 1. vDC (21) — существующий (`vdcUid`). 2. Edge (22) — существующий (`nsxtUid`). 3. vApp (26) — существующий (`vappUid`), привязан к vDC и Edge. 4. ВМ (28) — create; обязательные: `vappUid`, `vmName`, `vmCpu`, `vmRam`, `accessPortList`, `imageVm`, `userLogin`, `userPublicKey`, `ipSpaceName`. ## Правила для будущего графа 1. Рисовать стрелку только по подтверждённой связи сервиса каталога. 2. `ref_svc_id` считать прямой зависимостью; `descr` использовать для подписи стрелки и проверки смысла. 3. Не считать общей платформой, DNS-полем или внешним IP автоматическую связь между сервисами без ссылки на конкретный сервисный ID. 4. Поля без `ref_svc_id` вынести в отдельный список кандидатов на проверку, но не смешивать с подтверждёнными рёбрами.