lmrc_kubernetes/lib.rs
1//! # Kubernetes Manager
2//!
3//! A comprehensive Rust library for managing Kubernetes resources.
4//!
5//! This library provides a high-level, ergonomic API for common Kubernetes operations
6//! including deployments, services, secrets, and namespace management.
7//!
8//! ## Features
9//!
10//! - **Deployment Management**: Create, update, rollback, and scale deployments
11//! - **Service Management**: Manage Kubernetes Services with different types (ClusterIP, NodePort, LoadBalancer)
12//! - **Secret Management**: Handle Docker registry secrets and generic secrets
13//! - **Namespace Operations**: Create and manage namespaces
14//! - **Health Monitoring**: Wait for deployments to be ready with detailed error reporting
15//! - **Builder Pattern**: Ergonomic API for constructing resource specifications
16//!
17//! ## Quick Start
18//!
19//! ```no_run
20//! use lmrc_kubernetes::{Client, ClientConfig};
21//! use lmrc_kubernetes::deployment::{DeploymentSpec, ContainerSpec};
22//! use lmrc_kubernetes::config::DeploymentOptions;
23//!
24//! #[tokio::main]
25//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
26//! // Create a client
27//! let config = ClientConfig::infer().await?;
28//! let client = Client::new(config, "default").await?;
29//!
30//! // Ensure namespace exists
31//! client.namespaces().ensure("my-app").await?;
32//!
33//! // Create a deployment
34//! let container = ContainerSpec::new("app", "nginx:1.21")
35//! .with_port(80)
36//! .with_env("ENV", "production");
37//!
38//! let deployment = DeploymentSpec::new("web-app")
39//! .with_replicas(3)
40//! .with_container(container);
41//!
42//! let options = DeploymentOptions::new()
43//! .timeout_secs(300)
44//! .wait(true);
45//!
46//! // Switch to the target namespace
47//! let app_client = client.with_namespace("my-app");
48//! app_client.deployments().apply(&deployment, &options).await?;
49//!
50//! // Get deployment status
51//! let status = app_client.deployments().status("web-app").await?;
52//! println!("Ready: {}/{}", status.ready_replicas, status.replicas);
53//!
54//! Ok(())
55//! }
56//! ```
57//!
58//! ## Configuration
59//!
60//! The library supports multiple ways to configure Kubernetes access:
61//!
62//! ```no_run
63//! use lmrc_kubernetes::ClientConfig;
64//!
65//! # async fn examples() -> Result<(), Box<dyn std::error::Error>> {
66//! // Infer from environment (tries in-cluster, then KUBECONFIG, then ~/.kube/config)
67//! let config = ClientConfig::infer().await?;
68//!
69//! // Use a specific kubeconfig file
70//! let config = ClientConfig::from_kubeconfig("/path/to/kubeconfig").await?;
71//!
72//! // Use in-cluster configuration (when running inside a pod)
73//! let config = ClientConfig::in_cluster()?;
74//!
75//! // Customize field manager name
76//! let config = ClientConfig::infer().await?
77//! .with_field_manager("my-app");
78//! # Ok(())
79//! # }
80//! ```
81
82#![deny(missing_docs)]
83#![warn(clippy::all)]
84
85mod client;
86pub mod config;
87pub mod configmap;
88pub mod cronjob;
89pub mod deployment;
90pub mod error;
91pub mod gateway;
92pub mod hpa;
93pub mod ingress;
94pub mod job;
95pub mod namespace;
96pub mod networkpolicy;
97pub mod pvc;
98pub mod secret;
99pub mod service;
100
101// Re-export main types for convenience
102pub use client::Client;
103pub use config::{ClientConfig, DeploymentOptions, RollbackOptions};
104pub use error::{Error, Result};
105
106// Re-export commonly used deployment types
107pub use deployment::{
108 ContainerSpec, DeploymentManager, DeploymentSpec, DeploymentStatus, DeploymentStrategy,
109 ExecProbe, HttpGetProbe, KeyToPath, ProbeSpec, ResourceRequirements, TcpSocketProbe, Volume,
110 VolumeMount, VolumeSource,
111};
112
113// Re-export service types
114pub use service::{ServiceManager, ServiceSpec, ServiceType};
115
116// Re-export secret manager
117pub use secret::SecretManager;
118
119// Re-export namespace manager
120pub use namespace::NamespaceManager;
121
122// Re-export ConfigMap types
123pub use configmap::{ConfigMapManager, ConfigMapSpec};
124
125// Re-export Ingress types
126pub use ingress::{IngressManager, IngressRule, IngressSpec, IngressTLS, PathType};
127
128// Re-export Gateway API types
129pub use gateway::{GatewayManager, GatewaySpec, HTTPRoute, HTTPRouteRule, Protocol};
130
131// Re-export NetworkPolicy types
132pub use networkpolicy::{
133 NetworkPolicyManager, NetworkPolicySpec, PolicyRule, PolicyType, PortProtocol,
134};
135
136// Re-export Job types
137pub use job::{JobManager, JobSpec, RestartPolicy};
138
139// Re-export CronJob types
140pub use cronjob::{ConcurrencyPolicy, CronJobManager, CronJobSpec};
141
142// Re-export PVC types
143pub use pvc::{AccessMode, PersistentVolumeClaimSpec, PvcManager, StorageClass};
144
145// Re-export HPA types
146pub use hpa::{HpaManager, HpaSpec, MetricTarget, MetricType, ScaleTargetRef};