Files
app-autotest/site/app.py
T

67 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
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.18"
# 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)