0a9ad193e82267ebd70624837fff42683b0f7a0f
polygon v0.2.2
Эмулятор 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: только blueprint'ы + app.run() (57 строк)
├── routes/ # 6 blueprint-файлов по доменам
│ ├── root.py # /health, /
│ ├── services_routes.py# /api/v1/svc/services
│ ├── instances_routes.py# /api/v1/svc/instances
│ ├── operations_routes.py# /api/v1/svc/instanceOperations/*
│ ├── run.py # /api/v1/svc/instanceOperations/<uid>/run
│ └── mock_routes.py # /api/v1/svc/_mock/*
├── mock_state.py # MockState: instances, operations, op_params
├── state_machine.py # apply_effect() — мутация состояния
├── config/
│ └── loader.py # загрузка YAML + SERVICES/OPS_INDEX/DELAY/VERSION
├── utils/
│ ├── now.py # now() — UTC ISO с 'Z'
│ └── pluralize.py # pluralize() — плюрализация
├── from_stands.py # конвертер STANDS YAML → polygon config
├── static/
│ └── style.css # тёмная тема
├── templates/
│ └── index.html # Jinja2-шаблон
└── services/ # YAML-конфиги (сгенерированы from_stands.py)
⛔ Ровно 1 gunicorn-воркер. Состояние в памяти, не shared.
Запуск
# Локально
cd site && python app.py # порт 5000
# Тесты
pytest tests/ -v # 19 тестов
Обновление YAML из terraform
Вручную — при каждом изменении в ~/tf_provider/generated/:
cd site
python from_stands.py ~/tf_provider/generated/dev/resources_yaml services/dev
python from_stands.py ~/tf_provider/generated/test/resources_yaml services/test
python from_stands.py ~/tf_provider/generated/prod/resources_yaml services/prod
cd .. && git add services/ && git commit -m "regenerate YAML" && git push
# → редеплоить через Nubes
API (17 эндпоинтов)
| Метод | Путь | Назначение |
|---|---|---|
| GET | /health |
Healthcheck |
| GET | / |
HTML с версией |
| GET | /api/v1/svc/services |
Список сервисов |
| GET | /api/v1/svc/services/<id> |
Операции сервиса |
| GET | /api/v1/svc/instances |
Пагинация |
| GET | /api/v1/svc/instances/<uid> |
Инстанс + state |
| POST | /api/v1/svc/instances |
Создать → 201 + Location |
| GET | /api/v1/svc/instanceOperations/default/<id> |
cfsParams |
| POST | /api/v1/svc/instanceOperations |
Создать операцию → 201 + Location |
| GET | /api/v1/svc/instanceOperations/<uid> |
Статус + cfsParams |
| POST | /api/v1/svc/instanceOperationCfsParams |
param → value |
| GET | /api/v1/svc/instanceOperations/<uid>/validate-cfs |
200, пустое тело |
| POST | /api/v1/svc/instanceOperations/<uid>/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/<s> |
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 — план реализации
- polygon-docs/sonnet-code-review-prompt.md — промпт code review
- polygon-docs/tf-provider-refs.md — ссылки на генератор YAML
Languages
Python
87.7%
HTML
8.4%
CSS
3.9%