import logging from typing import List from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from .. import models, schemas, proxmox_client as pve from ..database import get_db from ..deps import get_current_user, require_admin logger = logging.getLogger(__name__) router = APIRouter(prefix="/templates", tags=["templates"]) @router.get("", response_model=List[schemas.TemplateOut]) def list_templates(db: Session = Depends(get_db), _=Depends(get_current_user)): return db.query(models.Template).filter(models.Template.is_active == True).all() # noqa: E712 @router.post("", response_model=schemas.TemplateOut) def create_template( payload: schemas.TemplateCreate, db: Session = Depends(get_db), _=Depends(require_admin), ): tpl = models.Template(**payload.model_dump()) db.add(tpl) db.commit() db.refresh(tpl) return tpl @router.get("/from-proxmox") def list_proxmox_templates(_=Depends(require_admin)): """Ищет VM и LXC шаблоны непосредственно на Proxmox-ноде.""" try: vm_tpls = pve.list_vm_templates() except Exception as exc: logger.warning("Ошибка получения VM-шаблонов из Proxmox: %s", exc) vm_tpls = [] try: lxc_tpls = pve.list_lxc_templates() except Exception as exc: logger.warning("Ошибка получения LXC-шаблонов из Proxmox: %s", exc) lxc_tpls = [] return {"vm_templates": vm_tpls, "lxc_templates": lxc_tpls} @router.delete("/{template_id}") def deactivate_template( template_id: int, db: Session = Depends(get_db), _=Depends(require_admin) ): tpl = db.query(models.Template).filter(models.Template.id == template_id).first() if tpl: tpl.is_active = False db.commit() return {"ok": True}