//! 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, /// List of defined contexts (user–cluster associations) pub contexts: Option>, #[serde(rename = "current-context")] /// Current context pub current_context: String, /// List of defined users pub users: Option>, } impl Default for KubeConfig { fn default() -> Self { Self { api_version: "v1".into(), kind: "Config".into(), clusters: vec![], contexts: None, current_context: "".into(), users: None, } } }