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//! - [`config`] — Configuration file parsing (talosctl config)
42//! - [`resources`] — Typed API request/response wrappers
43//! - [`runtime`] — Resilience (retry, circuit breaker) and observability
44//! - [`error`] — Error types
45//! - [`api`] — Generated protobuf types (low-level)
46//! - [`testkit`] — Testing utilities
47//!
48//! ## Production Features
49//!
50//! ### Retry Policies
51//!
52//! ```rust
53//! use talos_api_rs::runtime::{RetryConfig, ExponentialBackoff};
54//! use std::time::Duration;
55//!
56//! let retry = RetryConfig::builder()
57//! .max_retries(3)
58//! .backoff(ExponentialBackoff::new(Duration::from_millis(100)))
59//! .build();
60//! ```
61//!
62//! ### Circuit Breaker
63//!
64//! ```rust
65//! use talos_api_rs::runtime::{CircuitBreaker, CircuitBreakerConfig};
66//! use std::time::Duration;
67//!
68//! let cb = CircuitBreaker::new(
69//! CircuitBreakerConfig::new()
70//! .with_failure_threshold(5)
71//! .with_reset_timeout(Duration::from_secs(30))
72//! );
73//! ```
74//!
75//! ### Prometheus Metrics
76//!
77//! ```rust
78//! use talos_api_rs::runtime::{MetricsCollector, MetricsConfig};
79//!
80//! let metrics = MetricsCollector::new(
81//! MetricsConfig::builder()
82//! .namespace("talos")
83//! .build()
84//! );
85//!
86//! // Export Prometheus format
87//! let output = metrics.to_prometheus_text();
88//! ```
89//!
90//! ## Disclaimer
91//!
92//! This project is **NOT** affiliated with Sidero Labs or Talos Linux.
93//! Provided AS-IS, without warranty of any kind.
94
95#![cfg_attr(docsrs, feature(doc_cfg))]
96
97pub mod api;
98pub mod client;
99pub mod config;
100pub mod error;
101pub mod resources;
102pub mod runtime;
103pub mod testkit;
104
105pub use client::{
106 ConnectionPool, ConnectionPoolConfig, EndpointHealth, HealthStatus, LoadBalancer, NodeTarget,
107 TalosClient, TalosClientConfig, TalosClientConfigBuilder, NODE_METADATA_KEY,
108};
109pub use config::{
110 TalosConfig, TalosContext, ENV_TALOSCONFIG, ENV_TALOS_CONTEXT, ENV_TALOS_ENDPOINTS,
111 ENV_TALOS_NODES,
112};
113pub use error::TalosError;
114pub use resources::{
115 ApplyConfigurationRequest, ApplyConfigurationResponse, ApplyConfigurationResult, ApplyMode,
116 BootstrapRequest, BootstrapResponse, BootstrapResult, ConnectionRecord, ConnectionState,
117 ContainerDriver, ContainerdNamespace, CopyRequest, CopyResponse, CpuInfo, CpuInfoResponse,
118 CpuInfoResult, DiskStat, DiskStatsResponse, DiskStatsResult, DiskUsageInfo, DiskUsageRequest,
119 DiskUsageResponse, DmesgRequest, DmesgResponse, EtcdAlarmDisarmResponse, EtcdAlarmListResponse,
120 EtcdAlarmType, EtcdDefragmentResponse, EtcdForfeitLeadershipRequest,
121 EtcdForfeitLeadershipResponse, EtcdLeaveClusterRequest, EtcdLeaveClusterResponse, EtcdMember,
122 EtcdMemberAlarm, EtcdMemberListRequest, EtcdMemberListResponse, EtcdMemberStatus,
123 EtcdRemoveMemberByIdRequest, EtcdRemoveMemberByIdResponse, EtcdStatusResponse, FileInfo,
124 FileType, GenerateClientConfigurationRequest, GenerateClientConfigurationResponse,
125 GenerateClientConfigurationResult, ImageInfo, ImageListRequest, ImagePullRequest,
126 ImagePullResponse, ImagePullResult, KubeconfigResponse, L4ProtoFilter, ListRequest,
127 ListResponse, LoadAvgResponse, LoadAvgResult, LogsRequest, LogsResponse, MemoryResponse,
128 MemoryResult, MountStat, MountsResponse, MountsResult, NetDevStat, NetstatFilter,
129 NetstatRequest, NetstatResponse, NetstatResult, NetworkDeviceStatsResponse,
130 NetworkDeviceStatsResult, PacketCaptureRequest, PacketCaptureResponse, ProcessInfo,
131 ProcessesResponse, ProcessesResult, ReadRequest, ReadResponse, ResetPartitionSpec,
132 ResetRequest, ResetResponse, ResetResult, RollbackResponse, RollbackResult,
133 ServiceRestartRequest, ServiceRestartResponse, ServiceStartRequest, ServiceStartResponse,
134 ServiceStopRequest, ServiceStopResponse, UpgradeRebootMode, UpgradeRequest, UpgradeResponse,
135 UpgradeResult, WipeMode,
136};
137pub use runtime::{
138 BackoffStrategy, CircuitBreaker, CircuitBreakerConfig, CircuitState, CustomRetryPolicy,
139 DefaultRetryPolicy, ExponentialBackoff, FixedBackoff, InterceptorMetrics, LinearBackoff,
140 LogLevel, LoggingConfig, LoggingInterceptor, NoBackoff, NoRetryPolicy, RequestLogger,
141 RequestSpan, RetryConfig, RetryConfigBuilder, RetryPolicy,
142};