lmrc-cli 0.3.16

CLI tool for scaffolding LMRC Stack infrastructure projects
Documentation
//! HTTP handlers for Kubernetes cluster endpoints

use axum::{extract::{State, Path, Query}, Json};
use lmrc_http_common::{HttpResult, SuccessResponse};
use serde::Deserialize;
use crate::{state::AppState, error::AppError};
use super::{service::KubernetesService, models::*};

#[derive(Deserialize)]
pub struct NamespaceQuery {
    namespace: Option<String>,
}

/// GET /api/kubernetes/clusters/:id/nodes
pub async fn list_nodes(
    State(_state): State<AppState>,
    Path(cluster_id): Path<i64>,
) -> HttpResult<Json<SuccessResponse<NodesListResponse>>> {
    tracing::info!("Listing nodes for cluster {}", cluster_id);

    // TODO: Get cluster connection details from database
    let mut service = KubernetesService::new();
    // service.connect(...).await?;

    let nodes = service.list_nodes().await?;
    Ok(Json(SuccessResponse::new(nodes)))
}

/// GET /api/kubernetes/clusters/:id/pods
pub async fn list_pods(
    State(_state): State<AppState>,
    Path(cluster_id): Path<i64>,
    Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<PodsListResponse>>> {
    tracing::info!("Listing pods for cluster {}", cluster_id);

    let mut service = KubernetesService::new();
    let pods = service.list_pods(query.namespace).await?;
    Ok(Json(SuccessResponse::new(pods)))
}

/// GET /api/kubernetes/clusters/:id/services
pub async fn list_services(
    State(_state): State<AppState>,
    Path(cluster_id): Path<i64>,
    Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<ServicesListResponse>>> {
    tracing::info!("Listing services for cluster {}", cluster_id);

    let mut service = KubernetesService::new();
    let services = service.list_services(query.namespace).await?;
    Ok(Json(SuccessResponse::new(services)))
}

/// GET /api/kubernetes/clusters/:id/deployments
pub async fn list_deployments(
    State(_state): State<AppState>,
    Path(cluster_id): Path<i64>,
    Query(query): Query<NamespaceQuery>,
) -> HttpResult<Json<SuccessResponse<DeploymentsListResponse>>> {
    tracing::info!("Listing deployments for cluster {}", cluster_id);

    let mut service = KubernetesService::new();
    let deployments = service.list_deployments(query.namespace).await?;
    Ok(Json(SuccessResponse::new(deployments)))
}