bootstrap: clonable config

This commit is contained in:
Mikaël Cluseau
2025-11-16 10:12:22 +01:00
parent 4ecee15b6b
commit 9cef7a773e

View File

@ -2,7 +2,7 @@ use std::collections::BTreeMap as Map;
pub const TAKE_ALL: i16 = -1; pub const TAKE_ALL: i16 = -1;
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct Config { pub struct Config {
pub anti_phishing_code: String, pub anti_phishing_code: String,
@ -59,7 +59,7 @@ impl Config {
} }
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct Auth { pub struct Auth {
pub name: String, pub name: String,
#[serde(alias = "sshKey")] #[serde(alias = "sshKey")]
@ -69,14 +69,14 @@ pub struct Auth {
pub password: Option<String>, pub password: Option<String>,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct Network { pub struct Network {
pub name: String, pub name: String,
pub interfaces: Vec<NetworkInterface>, pub interfaces: Vec<NetworkInterface>,
pub script: String, pub script: String,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct NetworkInterface { pub struct NetworkInterface {
pub var: String, pub var: String,
pub n: i16, pub n: i16,
@ -100,7 +100,7 @@ impl Default for SSHServer {
} }
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct LvmVG { pub struct LvmVG {
#[serde(alias = "vg")] #[serde(alias = "vg")]
pub name: String, pub name: String,
@ -112,7 +112,7 @@ pub struct LvmVG {
pub lvs: Vec<LvmLV>, pub lvs: Vec<LvmLV>,
} }
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize)]
pub struct LvmLVDefaults { pub struct LvmLVDefaults {
#[serde(default)] #[serde(default)]
pub fs: Filesystem, pub fs: Filesystem,
@ -120,7 +120,7 @@ pub struct LvmLVDefaults {
pub raid: Raid, pub raid: Raid,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum Filesystem { pub enum Filesystem {
Ext4, Ext4,
@ -147,7 +147,7 @@ impl Default for Filesystem {
} }
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct LvmLV { pub struct LvmLV {
pub name: String, pub name: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
@ -158,14 +158,14 @@ pub struct LvmLV {
pub size: LvSize, pub size: LvSize,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum LvSize { pub enum LvSize {
Size(String), Size(String),
Extents(String), Extents(String),
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct LvmPV { pub struct LvmPV {
pub n: i16, pub n: i16,
#[serde(default, skip_serializing_if = "Vec::is_empty")] #[serde(default, skip_serializing_if = "Vec::is_empty")]
@ -174,7 +174,7 @@ pub struct LvmPV {
pub udev: Option<UdevFilter>, pub udev: Option<UdevFilter>,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct CryptDev { pub struct CryptDev {
pub name: String, pub name: String,
// hit the limit of enum representation here (flatten + enum variant case) // hit the limit of enum representation here (flatten + enum variant case)
@ -230,7 +230,7 @@ pub enum DevFilter<'t> {
Udev(&'t UdevFilter), Udev(&'t UdevFilter),
} }
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum UdevFilter { pub enum UdevFilter {
Has(String), Has(String),
@ -241,13 +241,13 @@ pub enum UdevFilter {
Not(Box<UdevFilter>), Not(Box<UdevFilter>),
} }
#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize)]
pub struct Raid { pub struct Raid {
pub mirrors: Option<u8>, pub mirrors: Option<u8>,
pub stripes: Option<u8>, pub stripes: Option<u8>,
} }
#[derive(Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct Bootstrap { pub struct Bootstrap {
pub dev: String, pub dev: String,
pub seed: Option<String>, pub seed: Option<String>,