v0.5.0: 3 стенда — изоляция состояния, WSGI middleware, OpenAPI server selector, POLYGON_STANDS env
- loader.py: STANDS dict, get_services/get_ops_index per stand, POLYGON_STANDS env
- mock_state.py: get_state(stand_id) — ленивая инициализация
- app.py: StandMiddleware — перезапись PATH_INFO до Flask-роутинга
- Все роуты: LocalProxy(state), LocalProxy(SERVICES/OPS_INDEX) через g.stand_id
- openapi.py: _build_servers() — по одному серверу на стенд
- services/stand{1,2,3}/ — 37 YAML на стенд из STANDS/dev и STANDS/test
- tests/test_api.py: +4 multi-stand теста (изоляция, fail-next, OpenAPI servers)
- Обратная совместимость: /api/v1/svc/... → стенд по умолчанию
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
name: flask
|
||||
service_id: 89
|
||||
service_display_name: Web-сервер с фреймворком Flask
|
||||
service_short_name: flask
|
||||
service_man: '# Инструкция по развертыванию Web-сервер с фреймворком Flask через платформу<br/><br/>## 1. Общая информация<br/><br/>Сервис **Web-сервер с фреймворком Flask** предназначен для развертывания
|
||||
веб-приложений на базе Flask.<br/><br/>### Доступные операции<br/><br/>create — включить сервис, развернуть веб-приложение с указанными параметрами.<br/>delete — удалить сервис, только после suspend.<br/>modify
|
||||
— изменить настройки сервиса и переразвернуть.<br/>suspend — выключить веб-приложение, остановить обслуживание.<br/>resume — включить веб-приложение после suspend.<br/><br/>---<br/><br/>## 2. Параметры
|
||||
развертывания<br/><br/>Параметры входных данных операции **create**:<br/><br/>### Имя домена<br/>Описание: доменное имя для доступа к веб-приложению. Если указан FQDN, происходит проверка DNS на валидность
|
||||
А-записи. А-запись должна указывать на балансировщик ресурсной платформы. Если указано имя в рамках одного октета, оно будет добавлено в публичную DNS-зону.<br/>Пример значения: строка, допустимые FQDN
|
||||
или имя в одном октете. Пример: example.com или myapp.<br/><br/>### Платформа для развертывания<br/>Описание: кластер Kubernetes, в котором будет развернуто приложение.<br/>Пример значения: идентификатор
|
||||
кластера Kubernetes.<br/><br/>### Квота ядра пода<br/>Описание: количество CPU, выделяемое на под, в Milicores.<br/>Пример значения: целое число, например 500 для 0.5 ядра.<br/><br/>### Квота памяти пода<br/>Описание:
|
||||
количество памяти, выделяемое на под, в Megabytes.<br/>Пример значения: целое число, например 512 для 512 MB.<br/><br/>### Кол-во реплик пода<br/>Описание: количество инстансов пода для масштабирования.<br/>Пример
|
||||
значения: целое число, шт, например 2.<br/><br/>### URL Проекта (gitpath)<br/>Описание: полный HTTPS путь до проекта в Git-репозитории.<br/>Пример значения: URL в формате https://github.com/myuser/myproject.git.
|
||||
Доступ к репозиторию должен быть публичным.<br/><br/>### URL HealthCheck<br/>Описание: путь для проверки здоровья приложения внутри пода.<br/>Пример значения: строка, путь, например /api/v1/health.<br/><br/>###
|
||||
Переменные окружения пода<br/>Описание: структура данных, которая будет передана как переменные окружения в под.<br/>Пример значения: ключ-значение, например {"ENV": "production"}.<br/><br/>---<br/><br/>##
|
||||
3. Рекомендованные характеристики<br/><br/>### Тестовое окружение<br/>- Квота ядра пода: 300m (0.3 ядра)<br/>- Квота памяти пода: 256 MB<br/>- Кол-во реплик пода: 1<br/><br/>### Промышленное окружение<br/>-
|
||||
Квота ядра пода: от 1000m (1 ядро) в зависимости от нагрузки<br/>- Квота памяти пода: от 1024 MB (1 GB) с учетом потребностей приложения<br/>- Кол-во реплик пода: от 2 для обеспечения отказоустойчивости<br/><br/>---<br/><br/>##
|
||||
4. Выходные параметры<br/>Операция create не возвращает явных выходных параметров. Успешное выполнение операции приводит к развертыванию сервиса, доступного по указанному домену.<br/><br/>---<br/><br/>##
|
||||
5. Дополнительная информация<br/>- В корне проекта должен находиться файл requirements.txt со списком зависимостей Python.<br/>- Исходный код веб-приложения должен располагаться в директории site.<br/>-
|
||||
Запуск веб-сервера осуществляется командой python app.py.<br/>- Используется версия Python: python:3.12-slim.<br/>- Git-репозиторий должен быть публично доступен для платформы.<br/>- Операция delete возможна
|
||||
только после suspend.<br/>- Операция modify приводит к переразвертыванию с новыми параметрами.'
|
||||
lifecycle:
|
||||
suspendOnDestroyDefault: true
|
||||
adoptExistingOnCreateDefault: false
|
||||
operations:
|
||||
- svcOperationId: 376
|
||||
operation: create
|
||||
kind: instance
|
||||
action: create
|
||||
- svcOperationId: 379
|
||||
operation: delete
|
||||
kind: instance
|
||||
action: delete
|
||||
- svcOperationId: 375
|
||||
operation: modify
|
||||
kind: instance
|
||||
action: modify
|
||||
- svcOperationId: 381
|
||||
operation: reconcile
|
||||
kind: action
|
||||
action: reconcile
|
||||
- svcOperationId: 380
|
||||
operation: redeploy
|
||||
kind: action
|
||||
action: redeploy
|
||||
- svcOperationId: 378
|
||||
operation: resume
|
||||
kind: instance
|
||||
action: resume
|
||||
- svcOperationId: 377
|
||||
operation: suspend
|
||||
kind: instance
|
||||
action: suspend
|
||||
stateOut: {}
|
||||
cfsParams:
|
||||
- svcOperationCfsParamId: 1037
|
||||
svcOperationCfsParam: startupConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: false
|
||||
dataDescriptor:
|
||||
resourceRealm:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- iot-naeel
|
||||
- k8s-3-sandbox-nubes-ru
|
||||
- k8s-4-sandbox-nubes-ru
|
||||
- naeel-test-3
|
||||
- svcOperationCfsParamId: 1038
|
||||
svcOperationCfsParam: clusterConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
dataDescriptor:
|
||||
cpu:
|
||||
dataType: integer > 0
|
||||
defaultValue: '200'
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
memory:
|
||||
dataType: integer > 0
|
||||
defaultValue: '256'
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
replicas:
|
||||
dataType: integer > 0
|
||||
defaultValue: '1'
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- '1'
|
||||
- '3'
|
||||
- '5'
|
||||
- '7'
|
||||
- svcOperationCfsParamId: 1039
|
||||
svcOperationCfsParam: accessConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: false
|
||||
dataDescriptor:
|
||||
domain:
|
||||
dataType: string
|
||||
defaultValue: flask-ub0sbq5h
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
- svcOperationCfsParamId: 1040
|
||||
svcOperationCfsParam: appConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
dataDescriptor:
|
||||
version:
|
||||
dataType: string
|
||||
defaultValue: '3.12'
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- '3.12'
|
||||
gitPath:
|
||||
dataType: string
|
||||
defaultValue: https://github.com/Foxyhhd/Baldurs-Gate-test.git
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
healthPath:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: false
|
||||
isModifiable: false
|
||||
- svcOperationCfsParamId: 1041
|
||||
svcOperationCfsParam: jsonEnv
|
||||
dataType: map
|
||||
isRequired: false
|
||||
defaultValue: '{}'
|
||||
isModifiable: true
|
||||
- svcOperationCfsParamId: 1042
|
||||
svcOperationCfsParam: clusterConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
dataDescriptor:
|
||||
cpu:
|
||||
dataType: integer > 0
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
memory:
|
||||
dataType: integer > 0
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
replicas:
|
||||
dataType: integer > 0
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- '1'
|
||||
- '3'
|
||||
- '5'
|
||||
- '7'
|
||||
- svcOperationCfsParamId: 1043
|
||||
svcOperationCfsParam: appConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
dataDescriptor:
|
||||
version:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- '3.12'
|
||||
gitPath:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
healthPath:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: false
|
||||
isModifiable: false
|
||||
- svcOperationCfsParamId: 1044
|
||||
svcOperationCfsParam: jsonEnv
|
||||
dataType: map
|
||||
isRequired: false
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
- svcOperationCfsParamId: 1045
|
||||
svcOperationCfsParam: startupConfiguration
|
||||
dataType: map-fixed
|
||||
isRequired: true
|
||||
defaultValue: ''
|
||||
isModifiable: true
|
||||
dataDescriptor:
|
||||
resourceRealm:
|
||||
dataType: string
|
||||
defaultValue: ''
|
||||
isRequired: true
|
||||
isModifiable: false
|
||||
valueList:
|
||||
- iot-naeel
|
||||
- k8s-3-sandbox-nubes-ru
|
||||
- k8s-4-sandbox-nubes-ru
|
||||
- naeel-test-3
|
||||
cfsParamsByOp:
|
||||
376:
|
||||
- 1037
|
||||
- 1038
|
||||
- 1039
|
||||
- 1040
|
||||
- 1041
|
||||
379: []
|
||||
375:
|
||||
- 1042
|
||||
- 1043
|
||||
- 1044
|
||||
381: []
|
||||
380:
|
||||
- 1045
|
||||
378: []
|
||||
377: []
|
||||
stateParams:
|
||||
startupConfiguration: '{"resourceRealm": ""}'
|
||||
clusterConfiguration: '{"cpu": 200, "memory": 256, "replicas": 1}'
|
||||
accessConfiguration: '{"domain": "flask-ub0sbq5h"}'
|
||||
appConfiguration: '{"version": "3.12", "gitPath": "https://github.com/Foxyhhd/Baldurs-Gate-test.git", "healthPath": ""}'
|
||||
jsonEnv: '{}'
|
||||
Reference in New Issue
Block a user