63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""
|
||
routes/services_routes.py — эндпоинты сервисов.
|
||
|
||
Blueprint "services" с префиксом /api/v1/svc/services.
|
||
GET /services — список всех загруженных сервисов
|
||
GET /services/<id> — детали конкретного сервиса (список операций)
|
||
"""
|
||
|
||
from flask import Blueprint, jsonify
|
||
|
||
from config.loader import SERVICES
|
||
|
||
bp = Blueprint("services", __name__, url_prefix="/api/v1/svc/services")
|
||
|
||
|
||
@bp.route("", methods=["GET"])
|
||
@bp.route("/", methods=["GET"])
|
||
def list_services():
|
||
"""GET /api/v1/svc/services — список всех сервисов.
|
||
|
||
Возвращает {results: [{svcId, svc, svcShort}, ...]}.
|
||
Формат совпадает с реальным Nubes API:
|
||
svcId — числовой ID сервиса (1, 90, 91, ...)
|
||
svc — человекочитаемое имя (Болванка, PostgreSQL, ...)
|
||
svcShort — короткое имя (dummy, postgres, ...)
|
||
"""
|
||
results = []
|
||
for svc_id, svc_def in SERVICES.items():
|
||
results.append({
|
||
"svcId": svc_id,
|
||
"svc": svc_def.get("service_display_name", ""),
|
||
"svcShort": svc_def.get("service_short_name", svc_def.get("name", "")),
|
||
})
|
||
return jsonify({"results": results})
|
||
|
||
|
||
@bp.route("/<int:svc_id>", methods=["GET"])
|
||
def get_service(svc_id):
|
||
"""GET /api/v1/svc/services/{id} — детали сервиса.
|
||
|
||
Возвращает {svc: {svc, svcShort, operations: [{svcOperationId, operation}]}}.
|
||
Если сервис не найден — 404 с JSON-ошибкой.
|
||
"""
|
||
svc_def = SERVICES.get(svc_id)
|
||
if not svc_def:
|
||
return jsonify({"error": "service not found"}), 404
|
||
|
||
# Собрать список операций сервиса (create, modify, delete, suspend, ...)
|
||
ops = []
|
||
for op in svc_def.get("operations", []):
|
||
ops.append({
|
||
"svcOperationId": op["svcOperationId"],
|
||
"operation": op["operation"],
|
||
})
|
||
|
||
return jsonify({
|
||
"svc": {
|
||
"svc": svc_def.get("service_display_name", ""),
|
||
"svcShort": svc_def.get("service_short_name", svc_def.get("name", "")),
|
||
"operations": ops,
|
||
}
|
||
})
|