67 lines
3.3 KiB
Python
67 lines
3.3 KiB
Python
"""
|
||
app-autotest — точка входа Flask-приложения для автотестов Nubes.
|
||
|
||
Это приложение позволяет:
|
||
1. Тестировать операции с сервисами Nubes (create/modify/delete/...) через UI
|
||
2. Создавать и запускать сценарии (последовательности операций)
|
||
3. Просматривать историю запусков и логи
|
||
|
||
Blueprint'ы (каждый — отдельный файл в routes/):
|
||
- main_bp → / (главная: токен, инфраструктура, сервисы)
|
||
- api_test_bp → /api/test, /api/params, /api/log (ручной режим)
|
||
- api_scenario_run_bp → /api/scenario/run, /api/scenario/status (запуск сценариев)
|
||
- api_scenario_defs_bp → /api/scenario/definitions (CRUD сценариев)
|
||
|
||
Деплой: Nubes pythonk8s (managed service) с gunicorn:
|
||
gunicorn app:app --workers 2 --bind 0.0.0.0:8000
|
||
|
||
Конфигурация:
|
||
NUBES_API_ENDPOINT — URL API (по умолчанию test)
|
||
NUBES_API_TOKEN — сервисный токен (из переменных окружения k8s)
|
||
VERSION — версия приложения (меняется при КАЖДОМ изменении кода)
|
||
"""
|
||
|
||
import os
|
||
|
||
from flask import Flask
|
||
|
||
from routes.main import bp as main_bp
|
||
from routes.api_test import bp as api_test_bp
|
||
from routes.api_scenario_run import bp_run as api_scenario_run_bp
|
||
from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp
|
||
|
||
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
|
||
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
||
VERSION = "1.2.20"
|
||
|
||
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||
|
||
# Конфигурация из переменных окружения (задаются в Nubes UI при создании сервиса)
|
||
app.config["NUBES_API_ENDPOINT"] = os.getenv(
|
||
"NUBES_API_ENDPOINT",
|
||
"https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
|
||
)
|
||
app.config["NUBES_API_TOKEN"] = os.getenv("NUBES_API_TOKEN", "")
|
||
app.config["VERSION"] = VERSION
|
||
|
||
# Регистрируем blueprint'ы — каждый отвечает за свою группу маршрутов
|
||
app.register_blueprint(main_bp) # /
|
||
app.register_blueprint(api_test_bp) # /api/test, /api/params, ...
|
||
app.register_blueprint(api_scenario_run_bp) # /api/scenario/run, ...
|
||
app.register_blueprint(api_scenario_defs_bp) # /api/scenario/definitions, ...
|
||
|
||
|
||
@app.route("/health")
|
||
def health():
|
||
"""Healthcheck — всегда возвращает 200 OK.
|
||
|
||
Используется Nubes для проверки живости сервиса.
|
||
Если не ответит — сервис будет перезапущен."""
|
||
return "OK"
|
||
|
||
|
||
# Локальный запуск (без gunicorn) — только для разработки
|
||
if __name__ == "__main__":
|
||
app.run(debug=True, host="0.0.0.0", port=5000)
|