# polygon v0.2.0 Эмулятор REST API облачной платформы Nubes для интеграционных тестов app-autotest. Отдельный managed-сервис на Nubes pythonk8s: `polygon.pythonk8s.dev.nubes.ru`. Притворяется реальным Nubes API (префикс `/api/v1/svc`). ## Архитектура ``` polygon/ ├── requirements.txt # Flask>=3.0, gunicorn>=21.2, PyYAML>=6.0 ├── tests/ │ ├── test_converter.py # 10 юнит-тестов from_stands.py │ └── test_state_machine.py # 9 юнит-тестов state_machine.py └── site/ ├── app.py # Flask (17 эндпоинтов) ├── mock_state.py # MockState: instances, operations, op_params ├── state_machine.py # apply_effect() — мутация состояния ├── config_loader.py # загрузка services/*.yaml ├── from_stands.py # конвертер STANDS YAML → polygon config └── services/ # 37 YAML-конфигов (сгенерированы) ``` ⛔ **Ровно 1 gunicorn-воркер.** Состояние в памяти, не shared. ## Запуск ```bash # Локально cd site && python app.py # порт 5000 # Тесты pytest tests/ -v # 19 тестов # Генерация конфигов из STANDS YAML cd site && python from_stands.py services/ ``` ## API (17 эндпоинтов) | Метод | Путь | Назначение | |-------|------|------------| | GET | `/health` | Healthcheck | | GET | `/` | HTML с версией | | GET | `/api/v1/svc/services` | Список сервисов | | GET | `/api/v1/svc/services/` | Операции сервиса | | GET | `/api/v1/svc/instances` | Пагинация | | GET | `/api/v1/svc/instances/` | Инстанс + state | | POST | `/api/v1/svc/instances` | Создать → 201 + Location | | GET | `/api/v1/svc/instanceOperations/default/` | cfsParams | | POST | `/api/v1/svc/instanceOperations` | Создать операцию → 201 + Location | | GET | `/api/v1/svc/instanceOperations/` | Статус + cfsParams | | POST | `/api/v1/svc/instanceOperationCfsParams` | param → value | | GET | `/api/v1/svc/instanceOperations//validate-cfs` | 200, пустое тело | | POST | `/api/v1/svc/instanceOperations//run` | Выполнить | | POST | `/api/v1/svc/_mock/reset` | Сброс | | GET | `/api/v1/svc/_mock/state` | Отладка: состояние | | GET | `/api/v1/svc/_mock/services` | Отладка: сервисы | | POST | `/api/v1/svc/_mock/delay/` | MOCK_OP_DELAY | ## Переменные окружения | Переменная | По умолчанию | Описание | |------------|-------------|----------| | `MOCK_OP_DELAY` | `0.1` | Задержка операции в секундах | | `WEB_CONCURRENCY` | `1` | ⛔ Не менять — ровно 1 воркер | ## Деплой - Репозиторий: `https://gitea.services.ngcloud.ru/forcloud/polygon.git` - URL: `https://polygon.pythonk8s.dev.nubes.ru/` - Nubes pythonk8s managed service ## Связанные документы - [DOCS/polygon-plan.md](../DOCS/polygon-plan.md) — план реализации - [polygon-docs/sonnet-code-review-prompt.md](../polygon-docs/sonnet-code-review-prompt.md) — промпт code review - [polygon-docs/tf-provider-refs.md](../polygon-docs/tf-provider-refs.md) — ссылки на генератор YAML