- 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/... → стенд по умолчанию
235 lines
10 KiB
YAML
235 lines
10 KiB
YAML
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:
|
|
- k8s-3-sandbox-nubes-ru
|
|
- k8s-4-sandbox-nubes-ru
|
|
- 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-4brtjmwm
|
|
isRequired: true
|
|
isModifiable: false
|
|
- svcOperationCfsParamId: 1040
|
|
svcOperationCfsParam: appConfiguration
|
|
dataType: map-fixed
|
|
isRequired: true
|
|
defaultValue: ''
|
|
isModifiable: true
|
|
dataDescriptor:
|
|
healthPath:
|
|
dataType: string
|
|
defaultValue: ''
|
|
isRequired: false
|
|
isModifiable: false
|
|
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
|
|
- 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:
|
|
- k8s-3-sandbox-nubes-ru
|
|
- k8s-4-sandbox-nubes-ru
|
|
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-4brtjmwm"}'
|
|
appConfiguration: '{"healthPath": "", "version": "3.12", "gitPath": "https://github.com/Foxyhhd/Baldurs-Gate-test.git"}'
|
|
jsonEnv: '{}'
|