update(vm): remove pseudographic and add hetzner api calls

This commit is contained in:
Aleksandr Tcitlionok
2024-12-09 03:06:37 +00:00
parent 5d7ec5c363
commit 24ceca9e4f
3 changed files with 49 additions and 238 deletions

View File

@@ -1,6 +1,8 @@
from fastapi import APIRouter
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from database import insert_virtual_machine, fetch_all
import requests
from datetime import datetime
router = APIRouter()
@@ -27,3 +29,48 @@ def add_vm_data(vm: VirtualMachine):
vm_type=vm.type
)
return {"message": f"Virtual machine '{vm.name}' added successfully."}
@router.post("/vm/import-hetzner")
def import_hetzner_vms(api_token: str):
"""
Import virtual machines from Hetzner Cloud.
"""
hetzner_url = "https://api.hetzner.cloud/v1/servers"
headers = {
"Authorization": f"Bearer {api_token}"
}
try:
response = requests.get(hetzner_url, headers=headers)
response.raise_for_status()
except requests.RequestException as e:
raise HTTPException(status_code=500, detail=f"Failed to fetch data from Hetzner API: {e}")
servers = response.json().get("servers", [])
if not servers:
return {"message": "No servers found on Hetzner Cloud."}
for server in servers:
try:
name = server["name"]
location = server["datacenter"]["location"]["name"]
cpu = server["server_type"]["cores"]
memory = f"{server['server_type']['memory']} GB"
storage = f"{server['server_type']['disk']} GB"
vm_type = server["server_type"]["name"]
created_at = datetime.fromisoformat(server["created"].rstrip("Z"))
time_on_duty = round((datetime.utcnow() - created_at).total_seconds() / 3600, 2) # Convert to hours
insert_virtual_machine(
name=name,
location=location,
cpu=cpu,
memory=memory,
storage=storage,
vm_type=vm_type
)
except Exception as e:
# Log or handle individual server import errors gracefully
print(f"Failed to import server {server['name']}: {e}")
return {"message": f"Imported {len(servers)} virtual machines from Hetzner."}