talos_api_rs/lib.rs
1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! # talos-api-rs
4//!
5//! A typed, async, idiomatic Rust client for the [Talos Linux](https://www.talos.dev/) gRPC API.
6//!
7//! ## Features
8//!
9//! - **40+ APIs** — Machine, etcd, system, files, diagnostics
10//! - **Async-first** — Built on `tokio` and `tonic`
11//! - **Strongly typed** — No stringly-typed API calls
12//! - **Production-ready** — Retries, circuit breakers, connection pooling
13//! - **Observable** — Prometheus metrics, OpenTelemetry tracing
14//! - **mTLS support** — ED25519 certificates (Talos default)
15//!
16//! ## Quick Start
17//!
18//! ```rust,ignore
19//! use talos_api_rs::{TalosClient, TalosClientConfig};
20//!
21//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
22//! // Connect with mTLS
23//! let config = TalosClientConfig::builder("https://10.0.0.1:50000")
24//! .ca_cert("/path/to/ca.crt")
25//! .client_cert("/path/to/client.crt")
26//! .client_key("/path/to/client.key")
27//! .build();
28//!
29//! let client = TalosClient::new(config).await?;
30//!
31//! // Get kubeconfig from cluster
32//! let kubeconfig = client.kubeconfig().await?;
33//! println!("Got kubeconfig for cluster");
34//! # Ok(())
35//! # }
36//! ```
37//!
38//! ## Module Overview
39//!
40//! - [`client`] — Core client and connection management
41//! - [`resources`] — Typed API request/response wrappers
42//! - [`runtime`] — Resilience (retry, circuit breaker) and observability
43//! - [`error`] — Error types
44//! - [`api`] — Generated protobuf types (low-level)
45//! - [`testkit`] — Testing utilities
46//!
47//! ## Production Features
48//!
49//! ### Retry Policies
50//!
51//! ```rust
52//! use talos_api_rs::runtime::{RetryConfig, ExponentialBackoff};
53//! use std::time::Duration;
54//!
55//! let retry = RetryConfig::builder()
56//! .max_retries(3)
57//! .backoff(ExponentialBackoff::new(Duration::from_millis(100)))
58//! .build();
59//! ```
60//!
61//! ### Circuit Breaker
62//!
63//! ```rust
64//! use talos_api_rs::runtime::{CircuitBreaker, CircuitBreakerConfig};
65//! use std::time::Duration;
66//!
67//! let cb = CircuitBreaker::new(
68//! CircuitBreakerConfig::new()
69//! .with_failure_threshold(5)
70//! .with_reset_timeout(Duration::from_secs(30))
71//! );
72//! ```
73//!
74//! ### Prometheus Metrics
75//!
76//! ```rust
77//! use talos_api_rs::runtime::{MetricsCollector, MetricsConfig};
78//!
79//! let metrics = MetricsCollector::new(
80//! MetricsConfig::builder()
81//! .namespace("talos")
82//! .build()
83//! );
84//!
85//! // Export Prometheus format
86//! let output = metrics.to_prometheus_text();
87//! ```
88//!
89//! ## Disclaimer
90//!
91//! This project is **NOT** affiliated with Sidero Labs or Talos Linux.
92//! Provided AS-IS, without warranty of any kind.
93
94#![cfg_attr(docsrs, feature(doc_cfg))]
95
96pub mod api;
97pub mod client;
98pub mod error;
99pub mod resources;
100pub mod runtime;
101pub mod testkit;
102
103pub use client::{
104 ConnectionPool, ConnectionPoolConfig, EndpointHealth, HealthStatus, LoadBalancer, TalosClient,
105 TalosClientConfig, TalosClientConfigBuilder,
106};
107pub use error::TalosError;
108pub use resources::{
109 ApplyConfigurationRequest, ApplyConfigurationResponse, ApplyConfigurationResult, ApplyMode,
110 BootstrapRequest, BootstrapResponse, BootstrapResult, ConnectionRecord, ConnectionState,
111 ContainerDriver, CopyRequest, CopyResponse, CpuInfo, CpuInfoResponse, CpuInfoResult, DiskStat,
112 DiskStatsResponse, DiskStatsResult, DiskUsageInfo, DiskUsageRequest, DiskUsageResponse,
113 DmesgRequest, DmesgResponse, EtcdAlarmDisarmResponse, EtcdAlarmListResponse, EtcdAlarmType,
114 EtcdDefragmentResponse, EtcdForfeitLeadershipRequest, EtcdForfeitLeadershipResponse,
115 EtcdLeaveClusterRequest, EtcdLeaveClusterResponse, EtcdMember, EtcdMemberAlarm,
116 EtcdMemberListRequest, EtcdMemberListResponse, EtcdMemberStatus, EtcdRemoveMemberByIdRequest,
117 EtcdRemoveMemberByIdResponse, EtcdStatusResponse, FileInfo, FileType,
118 GenerateClientConfigurationRequest, GenerateClientConfigurationResponse,
119 GenerateClientConfigurationResult, KubeconfigResponse, L4ProtoFilter, ListRequest,
120 ListResponse, LoadAvgResponse, LoadAvgResult, LogsRequest, LogsResponse, MemoryResponse,
121 MemoryResult, MountStat, MountsResponse, MountsResult, NetDevStat, NetstatFilter,
122 NetstatRequest, NetstatResponse, NetstatResult, NetworkDeviceStatsResponse,
123 NetworkDeviceStatsResult, PacketCaptureRequest, PacketCaptureResponse, ProcessInfo,
124 ProcessesResponse, ProcessesResult, ReadRequest, ReadResponse, ResetPartitionSpec,
125 ResetRequest, ResetResponse, ResetResult, RollbackResponse, RollbackResult,
126 ServiceRestartRequest, ServiceRestartResponse, ServiceStartRequest, ServiceStartResponse,
127 ServiceStopRequest, ServiceStopResponse, UpgradeRebootMode, UpgradeRequest, UpgradeResponse,
128 UpgradeResult, WipeMode,
129};
130pub use runtime::{
131 BackoffStrategy, CircuitBreaker, CircuitBreakerConfig, CircuitState, CustomRetryPolicy,
132 DefaultRetryPolicy, ExponentialBackoff, FixedBackoff, InterceptorMetrics, LinearBackoff,
133 LogLevel, LoggingConfig, LoggingInterceptor, NoBackoff, NoRetryPolicy, RequestLogger,
134 RequestSpan, RetryConfig, RetryConfigBuilder, RetryPolicy,
135};