fix(export): use content type for YAML export

This commit is contained in:
Aleksandr Tcitlionok
2024-12-05 06:46:54 +00:00
parent fd984b302a
commit b9e4fdbf7a

View File

@@ -1,4 +1,4 @@
from fastapi import APIRouter from fastapi import APIRouter, Response
from database import fetch_all from database import fetch_all
import yaml import yaml
import json import json
@@ -9,30 +9,26 @@ router = APIRouter()
def fetch_k8s_data(): def fetch_k8s_data():
config.load_incluster_config() config.load_incluster_config()
v1 = client.CoreV1Api() v1 = client.CoreV1Api()
# Nodes nodes = [{
nodes = v1.list_node()
node_data = [{
"node_name": node.metadata.name, "node_name": node.metadata.name,
"cpu": node.status.capacity.get("cpu"), "cpu": node.status.capacity.get("cpu"),
"memory": node.status.capacity.get("memory"), "memory": node.status.capacity.get("memory"),
"pods_allocatable": node.status.allocatable.get("pods") "pods_allocatable": node.status.allocatable.get("pods"),
} for node in nodes.items] } for node in v1.list_node().items]
# Namespaces
namespaces = [ns.metadata.name for ns in v1.list_namespace().items] namespaces = [ns.metadata.name for ns in v1.list_namespace().items]
return {"nodes": nodes, "namespaces": namespaces}
return {"nodes": node_data, "namespaces": namespaces}
@router.get("/export") @router.get("/export")
def export_data(format: str = "yaml"): def export_data(format: str = "yaml"):
# Fetch database and Kubernetes data
data = { data = {
"metal_nodes": fetch_all("metal_nodes"), "metal_nodes": fetch_all("metal_nodes"),
"virtual_machines": fetch_all("virtual_machines"), "virtual_machines": fetch_all("virtual_machines"),
"kubernetes": fetch_k8s_data(), "kubernetes": fetch_k8s_data(),
} }
# Return in the requested format
if format.lower() == "yaml": if format.lower() == "yaml":
return yaml.safe_dump(data) yaml_data = yaml.safe_dump(data, sort_keys=False)
return Response(content=yaml_data, media_type="text/yaml")
return json.dumps(data, indent=2) return json.dumps(data, indent=2)