92 lines
2.4 KiB
Rust
92 lines
2.4 KiB
Rust
//! kubeadm configuration data types
|
||
//!
|
||
//! The Kubernetes API reference does not include a specification for the
|
||
//! `Config` resource, and as such there is no model for it in [`k8s_openapi`].
|
||
//! Since *dynk8s* needs to read and write objects of this type, to provide
|
||
//! configuration for `kubeadm` on dynamic nodes, a subset of the required
|
||
//! model is defined here.
|
||
use serde::{Deserialize, Serialize};
|
||
|
||
/// Cluster information
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
#[serde(rename_all = "kebab-case")]
|
||
pub struct ClusterInfo {
|
||
/// X.509 certificate of the Kubernetes certificate authority
|
||
pub certificate_authority_data: String,
|
||
/// URL of the Kubernetes API server
|
||
pub server: String,
|
||
}
|
||
|
||
/// Cluster definition
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct Cluster {
|
||
/// Cluster information
|
||
pub cluster: ClusterInfo,
|
||
/// Cluster name
|
||
pub name: String,
|
||
}
|
||
|
||
/// kubeconfig context information
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct ContextInfo {
|
||
/// The cluster to use
|
||
pub cluster: String,
|
||
/// The user to use
|
||
pub user: String,
|
||
}
|
||
|
||
/// kubeconfig context definition
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct Context {
|
||
/// Context information
|
||
pub context: ContextInfo,
|
||
/// Context name
|
||
pub name: String,
|
||
}
|
||
|
||
/// User information
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct UserInfo {
|
||
/// Bootstrap token for authentication
|
||
pub token: String,
|
||
}
|
||
|
||
/// User definition
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct User {
|
||
/// User name
|
||
pub name: String,
|
||
/// User information
|
||
pub user: UserInfo,
|
||
}
|
||
|
||
/// kubeconfig
|
||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||
pub struct KubeConfig {
|
||
#[serde(rename = "apiVersion")]
|
||
pub api_version: String,
|
||
pub kind: String,
|
||
/// List of defined clusters
|
||
pub clusters: Vec<Cluster>,
|
||
/// List of defined contexts (user–cluster associations)
|
||
pub contexts: Option<Vec<Context>>,
|
||
#[serde(rename = "current-context")]
|
||
/// Current context
|
||
pub current_context: String,
|
||
/// List of defined users
|
||
pub users: Option<Vec<User>>,
|
||
}
|
||
|
||
impl Default for KubeConfig {
|
||
fn default() -> Self {
|
||
Self {
|
||
api_version: "v1".into(),
|
||
kind: "Config".into(),
|
||
clusters: vec![],
|
||
contexts: None,
|
||
current_context: "".into(),
|
||
users: None,
|
||
}
|
||
}
|
||
}
|