Skip to main content

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, CopyRequest, CopyResponse, CpuInfo, CpuInfoResponse, CpuInfoResult, DiskStat,
118    DiskStatsResponse, DiskStatsResult, DiskUsageInfo, DiskUsageRequest, DiskUsageResponse,
119    DmesgRequest, DmesgResponse, EtcdAlarmDisarmResponse, EtcdAlarmListResponse, EtcdAlarmType,
120    EtcdDefragmentResponse, EtcdForfeitLeadershipRequest, EtcdForfeitLeadershipResponse,
121    EtcdLeaveClusterRequest, EtcdLeaveClusterResponse, EtcdMember, EtcdMemberAlarm,
122    EtcdMemberListRequest, EtcdMemberListResponse, EtcdMemberStatus, EtcdRemoveMemberByIdRequest,
123    EtcdRemoveMemberByIdResponse, EtcdStatusResponse, FileInfo, FileType,
124    GenerateClientConfigurationRequest, GenerateClientConfigurationResponse,
125    GenerateClientConfigurationResult, KubeconfigResponse, L4ProtoFilter, ListRequest,
126    ListResponse, LoadAvgResponse, LoadAvgResult, LogsRequest, LogsResponse, MemoryResponse,
127    MemoryResult, MountStat, MountsResponse, MountsResult, NetDevStat, NetstatFilter,
128    NetstatRequest, NetstatResponse, NetstatResult, NetworkDeviceStatsResponse,
129    NetworkDeviceStatsResult, PacketCaptureRequest, PacketCaptureResponse, ProcessInfo,
130    ProcessesResponse, ProcessesResult, ReadRequest, ReadResponse, ResetPartitionSpec,
131    ResetRequest, ResetResponse, ResetResult, RollbackResponse, RollbackResult,
132    ServiceRestartRequest, ServiceRestartResponse, ServiceStartRequest, ServiceStartResponse,
133    ServiceStopRequest, ServiceStopResponse, UpgradeRebootMode, UpgradeRequest, UpgradeResponse,
134    UpgradeResult, WipeMode,
135};
136pub use runtime::{
137    BackoffStrategy, CircuitBreaker, CircuitBreakerConfig, CircuitState, CustomRetryPolicy,
138    DefaultRetryPolicy, ExponentialBackoff, FixedBackoff, InterceptorMetrics, LinearBackoff,
139    LogLevel, LoggingConfig, LoggingInterceptor, NoBackoff, NoRetryPolicy, RequestLogger,
140    RequestSpan, RetryConfig, RetryConfigBuilder, RetryPolicy,
141};