This commit is contained in:
2026-03-05 04:07:53 +01:00
parent 08c1d0c605
commit dfe4e2d7cb
61 changed files with 1459 additions and 3640 deletions

69
crete/src/cluster.rs Normal file
View File

@@ -0,0 +1,69 @@
use std::net::Ipv4Addr;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{
base_dir,
node::{Node, OptionalNode},
patch::{PatchEnv, Patches},
};
#[derive(Debug, Deserialize, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Base {
#[serde(default)]
pub(crate) kernel_args: Vec<String>,
#[serde(default)]
pub(crate) patches: Patches,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Version {
kubernetes: semver::Version,
talos: semver::Version,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub enum ClusterEnv {
Production,
Staging,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Cluster {
#[serde(skip_deserializing)]
name: String,
version: Version,
nodes: Vec<String>,
cluster_env: ClusterEnv,
control_plane_ip: Ipv4Addr,
#[serde(default, skip_serializing)]
pub(crate) default: OptionalNode,
#[serde(skip_serializing)]
pub(crate) base: Base,
// pub secrets_file: PathBuf,
}
impl Cluster {
pub fn get(cluster_name: &str) -> Self {
let mut path = base_dir().join("clusters").join(cluster_name);
path.add_extension("yaml");
let content = std::fs::read_to_string(path).unwrap();
let mut cluster: Self = serde_yaml::from_str(&content).unwrap();
cluster.name = cluster_name.to_string();
cluster
}
pub fn nodes(&self, env: PatchEnv) -> Vec<Node> {
self.nodes
.iter()
.map(|node_name| Node::get(node_name, &env, self))
.collect()
}
}