smoke check error handling for create vm
This commit is contained in:
@@ -12,8 +12,7 @@ from .utils import run_cmd
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/api/flake/attrs")
|
||||
async def inspect_flake_attrs(url: str) -> FlakeAttrResponse:
|
||||
async def get_attrs(url: str) -> list[str]:
|
||||
cmd = nix_flake_show(url)
|
||||
stdout = await run_cmd(cmd)
|
||||
|
||||
@@ -21,17 +20,21 @@ async def inspect_flake_attrs(url: str) -> FlakeAttrResponse:
|
||||
try:
|
||||
data = json.loads(stdout)
|
||||
except JSONDecodeError:
|
||||
raise HTTPException(status_code=422, detail=f"Could not load flake.")
|
||||
|
||||
raise HTTPException(status_code=422, detail="Could not load flake.")
|
||||
|
||||
nixos_configs = data.get("nixosConfigurations", {})
|
||||
flake_attrs = list(nixos_configs.keys())
|
||||
|
||||
if not flake_attrs:
|
||||
raise HTTPException(status_code=422, detail="No entry or no attribute: nixosConfigurations")
|
||||
raise HTTPException(
|
||||
status_code=422, detail="No entry or no attribute: nixosConfigurations"
|
||||
)
|
||||
return flake_attrs
|
||||
|
||||
|
||||
return FlakeAttrResponse(flake_attrs=flake_attrs)
|
||||
@router.get("/api/flake/attrs")
|
||||
async def inspect_flake_attrs(url: str) -> FlakeAttrResponse:
|
||||
return FlakeAttrResponse(flake_attrs=await get_attrs(url))
|
||||
|
||||
|
||||
@router.get("/api/flake")
|
||||
|
||||
@@ -3,9 +3,12 @@ import logging
|
||||
from typing import Annotated, Iterator
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import APIRouter, BackgroundTasks, Body
|
||||
from fastapi import APIRouter, BackgroundTasks, Body, status
|
||||
from fastapi.exceptions import HTTPException
|
||||
from fastapi.responses import StreamingResponse
|
||||
|
||||
from clan_cli.webui.routers.flake import get_attrs
|
||||
|
||||
from ...nix import nix_build, nix_eval
|
||||
from ..schemas import VmConfig, VmCreateResponse, VmInspectResponse, VmStatusResponse
|
||||
from ..task_manager import BaseTask, get_task, register_task
|
||||
@@ -107,5 +110,11 @@ async def get_vm_logs(uuid: UUID) -> StreamingResponse:
|
||||
async def create_vm(
|
||||
vm: Annotated[VmConfig, Body()], background_tasks: BackgroundTasks
|
||||
) -> VmCreateResponse:
|
||||
flake_attrs = await get_attrs(vm.flake_url)
|
||||
if vm.flake_attr not in flake_attrs:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=f"Provided attribute '{vm.flake_attr}' does not exist.",
|
||||
)
|
||||
uuid = register_task(BuildVmTask, vm)
|
||||
return VmCreateResponse(uuid=str(uuid))
|
||||
|
||||
Reference in New Issue
Block a user