""" 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.19" # 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)