Initial commit - podman-mvp net na toevoegen cpu en mem kolommen
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import os
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from pydantic import BaseModel
|
||||
import requests_unixsocket
|
||||
import uvicorn
|
||||
|
||||
app = FastAPI(title="Podman MVP Control Plane")
|
||||
|
||||
# Gebruik requests-unixsocket voor communicatie met de Podman socket
|
||||
SESSION = requests_unixsocket.Session()
|
||||
PODMAN_API_BASE = "http+unix://%2Frun%2Fuser%2F1000%2Fpodman%2Fpodman.sock/v5.4.2"
|
||||
WORKLOADS_DIR = "/app/workloads"
|
||||
|
||||
class FileCreate(BaseModel):
|
||||
path: str
|
||||
content: str
|
||||
|
||||
@app.get("/workloads")
|
||||
def list_workloads():
|
||||
yaml_files = []
|
||||
try:
|
||||
for root, dirs, files in os.walk(WORKLOADS_DIR):
|
||||
for file in files:
|
||||
if file.endswith((".yaml", ".kube")):
|
||||
full_path = os.path.join(root, file)
|
||||
rel_path = os.path.relpath(full_path, WORKLOADS_DIR)
|
||||
yaml_files.append(rel_path)
|
||||
return {"workloads": sorted(yaml_files)}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@app.post("/workloads/deploy/{filename:path}")
|
||||
def deploy_workload(filename: str):
|
||||
path = os.path.join(WORKLOADS_DIR, filename)
|
||||
try:
|
||||
with open(path, 'r') as f:
|
||||
yaml_content = f.read()
|
||||
url = f"{PODMAN_API_BASE}/libpod/kube/play"
|
||||
response = SESSION.post(url, data=yaml_content)
|
||||
return {"status": "success", "podman_response": response.json()}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@app.post("/workloads/create-folder/{foldername:path}")
|
||||
def create_folder(foldername: str):
|
||||
target_path = os.path.join(WORKLOADS_DIR, foldername)
|
||||
os.makedirs(target_path, exist_ok=True)
|
||||
return {"status": "success", "message": f"Map {foldername} aangemaakt"}
|
||||
|
||||
@app.post("/workloads/save-file")
|
||||
def save_file(file_data: FileCreate):
|
||||
target_path = os.path.join(WORKLOADS_DIR, file_data.path)
|
||||
os.makedirs(os.path.dirname(target_path), exist_ok=True)
|
||||
with open(target_path, 'w') as f:
|
||||
f.write(file_data.content)
|
||||
return {"status": "success", "message": f"Bestand {file_data.path} opgeslagen"}
|
||||
|
||||
@app.get("/pods")
|
||||
def list_pods():
|
||||
"""Haalt de lijst met pods en hun status op via de Podman API."""
|
||||
try:
|
||||
url = f"{PODMAN_API_BASE}/libpod/pods/json"
|
||||
response = SESSION.get(url)
|
||||
if response.status_code != 200:
|
||||
return {"status": "error", "details": response.json()}
|
||||
|
||||
# We geven de ruwe lijst met pods terug
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
Reference in New Issue
Block a user