Схема зависимостей облачных сервисов (docs/diagrams)
Папка содержит все артефакты схемы: исходники, отрендеренные изображения и генератор. Здесь же описан процесс создания и результаты сверки с контрактами.
1. Состав папки
| Файл | Что это | Чем создаётся |
|---|---|---|
infra_services_flow.mmd |
исходник Mermaid-версии схемы | правится вручную |
infra_services_flow.svg |
вектор Mermaid-версии | рендер через mermaid.ink |
infra_services_flow.png |
растр Mermaid-версии | рендер через mermaid.ink |
render_infra_diagram.py |
генератор стилизованной схемы (PNG + SVG) | чистый Python + Pillow |
infra_services_diagram.png |
стилизованная схема, растр 1600×720 (рендер 2x + LANCZOS) | render_infra_diagram.py |
infra_services_diagram.svg |
стилизованная схема, вектор | render_infra_diagram.py |
Две версии существуют одновременно: Mermaid — для правок текстом и встраивания в Markdown; стилизованная — как готовая картинка для показа.
2. Источник данных
Единственный источник фактов — YAML-контракты сервисов:
generated/dev/resources_yaml/*.yaml
Из них берутся:
service_id,service_display_name— идентичность сервиса;operations[].params[].ref_svc_id— прямая зависимость от другого сервиса;operations[].params[].depends_on— зависимость порядка внутри операции;value_list,default,man,descr— значения на блоках (CPU, сети и т.п.);service_man— чек-листы и порядок действий, заданные самой платформой.
Terraform-файлы DEV_STAND/* не используются как источник для этой схемы —
они лишь один из примеров потребления.
3. Как перегенерировать
cd /home/naeel/TF/tf_provider
python3 docs/diagrams/render_infra_diagram.py
Скрипт пишет infra_services_diagram.png и .svg в свою же папку
(docs/diagrams/), путь вычисляется от расположения файла.
Требования: python3 с Pillow и шрифты DejaVu
(/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf, ...-Bold.ttf).
Сторонние библиотеки для SVG не нужны — SVG формируется текстом.
Для Mermaid-версии нужен рендерер (mermaid.ink, mmdc или предпросмотр
Markdown в VS Code); в этом репозитории использовался mermaid.ink через
python3 + urllib.
4. Структура картинки
Пять колонок = этапы создания, слева направо:
- Тенант — Организация в Cloud Director (19)
- Пул ресурсов — Виртуальный датацентр (21)
- Сетевой периметр — Сетевой шлюз периметра / Edge (22)
- Среда запуска — Каталог ВМ / vApp (26) + Внешние IP (vcOrg modify / 25)
- Потребители — Виртуальная машина (28) и Kubernetes кластер Штурвал (150)
Обозначения
- Сплошная стрелка — обязательная зависимость, ссылка на UUID существующего
инстанса (
ref_svc_id). - Пунктирная стрелка — выделение ресурса, операция
modifyили предусловие. - Направление стрелки всегда от зависимости к потребителю:
Org → vDC,vApp → VM. То есть стрелка отвечает на вопрос «что должно существовать до». - Цвет колонки кодирует этап, цвет рамки блока — группу (тенант / ресурсы / сеть / потребители / адреса). Легенда — в правом нижнем углу картинки.
Бейджи точек выделения ресурсов
| Бейдж | Где на схеме | Что означает |
|---|---|---|
| «здесь выделяются CPU / RAM / Диск» | блок vDC (21) | cpuAllocated, memAllocated, storageConfig |
| «SNAT настраивается операцией modify» | блок Edge (22) | SNAT — не сервис, а modify у Edge |
| «здесь выделяются IP» | блок «Внешние IP» | выделение адресов на организации |
| «требует ALB + VS ≥ 3» | блок Штурвала (150) | обязательное условие из чек-листа |
5. Результат сверки с YAML
Проверено построчно (коммит 6791e8f, дополнение — связь vApp → Внешние IP).
| Утверждение на схеме | Источник |
|---|---|
Организация: типы iaas / saas |
19_vc_org.yaml:47-53 |
Выделение IP через vcOrg modify (vIPConfigure) |
19_vc_org.yaml:115 |
| Для внешних IP нужны vDC и Edge | 19_vc_org.yaml:112 (man) |
vDC: cpuGuaranteed: 0% / 50% / 80% |
21_vc_vdc.yaml:71-78 |
vDC: cpuAllocated, memAllocated, storageConfig |
21_vc_vdc.yaml:49,83,93 |
| Edge: AVI Load Balancer | 22_vc_nsxt.yaml (needEnableAVI) |
Edge: routed-сеть 10.10.102.0/24 |
22_vc_nsxt.yaml:5 |
Edge: SNAT настраивается операцией modify |
22_vc_nsxt.yaml (modify → ipSpaceName) |
vApp → vDC (vdcUid), Edge (nsxtUid) |
26_vapp.yaml:38,56 |
ВМ → vApp (vappUid), vmCpu · vmRam · vmDisk |
28_vc_vm_v3.yaml:39,49,59,69 |
Штурвал: vdcUid, nsxtUid; sizingPolicy · sizingDisk · count |
150_k8s_sthutrval_cluster.yaml:41,47,132,141,148 |
| Публичные IP: NAT/DNAT через сервис 25 | 25_vcexternalip.yaml:41,57,100 |
| Публичные IP требуют «Каталог» (vApp) | 25_vcexternalip.yaml:5 (service_man) |
| Штурвал: обязательны ALB и VS ≥ 3; суммарно 3 внешних адреса | 150_k8s_sthutrval_cluster.yaml (service_man, чек-лист) |
6. Известные ограничения
- Переиспользование инстансов («vDC и Edge могут быть переиспользованы») не написано в YAML буквально — это следствие семантики ссылок на UUID существующего инстанса. Уверенность средняя, не высокая.
- Блок «Внешние IP» объединяет два механизма: выделение адресов на организации
(
vcOrg modify) и правила NAT у сервиса 25 (vcexternalip). Они подписаны раздельно внутри блока, но нарисованы одной вершиной. - Остальные 33 сервиса каталога на схеме не показаны — отрисованы только инфраструктурные цепочки и их прямые потребители.
- Схема — компоновка по контрактам, а не результат наблюдения за развёртыванием. Фактический порядок и доступность нужно подтверждать отдельно.
7. История
| Дата | Изменение |
|---|---|
| 2026-09-26 | Создана Mermaid-версия (infra_services_flow.*) |
| 2026-09-26 | Исправлена связь «вычислительный пул»: от vDC, а не от внешних IP |
| 2026-09-26 | Добавлен генератор стилизованной схемы (render_infra_diagram.py) |
| 2026-09-26 | Убрана дублирующая подпись modify: SNAT у блока Edge |
| 2026-09-26 | Сверка с YAML; добавлена связь vApp → Внешние IP — предусловие сервиса 25 |
| 2026-09-26 | Все артефакты перенесены в docs/diagrams/ |