feat(images): node-arch endpoint for arch-aware filtering
GET /proxmox/api/{server_id}/images/node-arch derives amd64/arm64 from
node status current-kernel.machine; returns null when node unreachable.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -194,6 +194,32 @@ def get_lxc_repo_templates(
|
|||||||
raise HTTPException(status_code=500, detail=str(e))
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/api/{server_id}/images/node-arch")
|
||||||
|
def get_node_arch(
|
||||||
|
server_id: int,
|
||||||
|
node: str,
|
||||||
|
db: Session = Depends(get_db),
|
||||||
|
current_user: User = Depends(PermissionChecker("template:view")),
|
||||||
|
):
|
||||||
|
"""Архитектура ноды (amd64|arm64) по current-kernel.machine из статуса ноды."""
|
||||||
|
server = db.query(ProxmoxServer).filter(ProxmoxServer.id == server_id).first()
|
||||||
|
if not server:
|
||||||
|
raise HTTPException(status_code=404, detail="Proxmox server not found")
|
||||||
|
client = _get_proxmox_client(server)
|
||||||
|
if not client.is_connected():
|
||||||
|
# Нода недоступна — пусть фронт сам решит (дефолт amd64)
|
||||||
|
return {"arch": None, "machine": None}
|
||||||
|
status = client.get_node_status(node) or {}
|
||||||
|
ck = status.get('current-kernel') or {}
|
||||||
|
machine = (ck.get('machine') or status.get('machine') or '').lower()
|
||||||
|
arch = None
|
||||||
|
if machine in ('x86_64', 'amd64'):
|
||||||
|
arch = 'amd64'
|
||||||
|
elif machine in ('aarch64', 'arm64'):
|
||||||
|
arch = 'arm64'
|
||||||
|
return {"arch": arch, "machine": machine or None}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/api/{server_id}/images/storages")
|
@router.get("/api/{server_id}/images/storages")
|
||||||
def get_image_target_storages(
|
def get_image_target_storages(
|
||||||
server_id: int,
|
server_id: int,
|
||||||
|
|||||||
Reference in New Issue
Block a user