diff --git a/README.md b/README.md index 36d2d2f..6fe6cff 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# hk24-metalcheck -MetalCheck - Hackathon 2024 +# Metal Check + +Metal Check - Get tips and information about your Kubernetes and on-premise servers. diff --git a/app/requirements.txt b/app/requirements.txt index d8eac29..91208dc 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -3,3 +3,4 @@ fastapi uvicorn pyyaml rich +kubernetes diff --git a/app/routes/k8s.py b/app/routes/k8s.py index b690947..49449d9 100644 --- a/app/routes/k8s.py +++ b/app/routes/k8s.py @@ -1,32 +1,33 @@ from fastapi import APIRouter -from pydantic import BaseModel -from typing import List -from database import insert_kubernetes_node, fetch_all +from kubernetes import client, config router = APIRouter() -class KubernetesNode(BaseModel): - cluster_name: str - node_name: str - cpu: int - memory: str - storage: str - type: str - namespaces: List[str] +# Initialize Kubernetes client +def init_k8s_client(): + try: + config.load_incluster_config() + except: + config.load_kube_config() # local testing @router.get("/k8s/data") def get_k8s_data(): - return {"kubernetes_nodes": fetch_all("kubernetes_nodes")} + init_k8s_client() + v1 = client.CoreV1Api() -@router.post("/k8s/data") -def add_k8s_data(node: KubernetesNode): - insert_kubernetes_node( - cluster_name=node.cluster_name, - node_name=node.node_name, - cpu=node.cpu, - memory=node.memory, - storage=node.storage, - node_type=node.type, - namespaces=node.namespaces - ) - return {"message": f"Kubernetes node '{node.node_name}' in cluster '{node.cluster_name}' added successfully."} + # Fetch nodes + nodes = v1.list_node() + node_data = [] + for node in nodes.items: + node_data.append({ + "node_name": node.metadata.name, + "cpu": node.status.capacity.get("cpu"), + "memory": node.status.capacity.get("memory"), + "pods_allocatable": node.status.allocatable.get("pods"), + }) + + # Fetch namespaces + namespaces = v1.list_namespace() + namespace_data = [ns.metadata.name for ns in namespaces.items] + + return {"nodes": node_data, "namespaces": namespace_data}