Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com> --- proxmox-auto-installer/src/answer.rs | 147 +++++++++++++++++++++++++++ proxmox-auto-installer/src/lib.rs | 1 + 2 files changed, 148 insertions(+) create mode 100644 proxmox-auto-installer/src/answer.rs
diff --git a/proxmox-auto-installer/src/answer.rs b/proxmox-auto-installer/src/answer.rs new file mode 100644 index 0000000..0f6c593 --- /dev/null +++ b/proxmox-auto-installer/src/answer.rs @@ -0,0 +1,147 @@ +use serde::{Deserialize, Serialize}; +use std::collections::BTreeMap; + +#[derive(Clone, Deserialize, Debug)] +#[serde(rename_all = "lowercase")] +pub struct Answer { + pub global: Global, + pub network: Network, + pub disks: Disks, +} + +#[derive(Clone, Deserialize, Debug)] +pub struct Global { + pub country: String, + pub fqdn: String, + pub keyboard: String, + pub mailto: String, + pub timezone: String, + pub password: String, + pub pre_command: Option<Vec<String>>, + pub post_command: Option<Vec<String>>, + pub reboot_on_error: Option<bool>, +} + +#[derive(Clone, Deserialize, Debug)] +pub struct Network { + pub use_dhcp: Option<bool>, + pub cidr: Option<String>, + pub dns: Option<String>, + pub gateway: Option<String>, + // use BTreeMap to have keys sorted + pub filter: Option<BTreeMap<String, String>>, +} + +#[derive(Clone, Deserialize, Debug)] +pub struct Disks { + pub filesystem: Option<Filesystem>, + pub disk_selection: Option<Vec<String>>, + pub filter_match: Option<FilterMatch>, + // use BTreeMap to have keys sorted + pub filter: Option<BTreeMap<String, String>>, + pub zfs: Option<ZfsOptions>, + pub lvm: Option<LvmOptions>, + pub btrfs: Option<BtrfsOptions>, +} + +#[derive(Clone, Deserialize, Debug, PartialEq)] +#[serde(rename_all = "lowercase")] +pub enum FilterMatch { + Any, + All, +} + +#[derive(Clone, Deserialize, Serialize, Debug)] +#[serde(rename_all = "kebab-case")] +pub enum Filesystem { + Ext4, + Xfs, + ZfsRaid0, + ZfsRaid1, + ZfsRaid10, + ZfsRaidZ1, + ZfsRaidZ2, + ZfsRaidZ3, + BtrfsRaid0, + BtrfsRaid1, + BtrfsRaid10, +} + +#[derive(Clone, Deserialize, Debug)] +pub struct ZfsOptions { + pub ashift: Option<usize>, + pub arc_max: Option<usize>, + pub checksum: Option<ZfsChecksumOption>, + pub compress: Option<ZfsCompressOption>, + pub copies: Option<usize>, + pub hdsize: Option<f64>, +} + +impl ZfsOptions { + pub fn new() -> ZfsOptions { + ZfsOptions { + ashift: None, + arc_max: None, + checksum: None, + compress: None, + copies: None, + hdsize: None, + } + } +} + +#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Deserialize)] +#[serde(rename_all(deserialize = "lowercase"))] +pub enum ZfsCompressOption { + #[default] + On, + Off, + Lzjb, + Lz4, + Zle, + Gzip, + Zstd, +} + +#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum ZfsChecksumOption { + #[default] + On, + Off, + Fletcher2, + Fletcher4, + Sha256, +} + +#[derive(Clone, Deserialize, Serialize, Debug)] +pub struct LvmOptions { + pub hdsize: Option<f64>, + pub swapsize: Option<f64>, + pub maxroot: Option<f64>, + pub maxvz: Option<f64>, + pub minfree: Option<f64>, +} + +impl LvmOptions { + pub fn new() -> LvmOptions { + LvmOptions { + hdsize: None, + swapsize: None, + maxroot: None, + maxvz: None, + minfree: None, + } + } +} + +#[derive(Clone, Deserialize, Serialize, Debug)] +pub struct BtrfsOptions { + pub hdsize: Option<f64>, +} + +impl BtrfsOptions { + pub fn new() -> BtrfsOptions { + BtrfsOptions { hdsize: None } + } +} diff --git a/proxmox-auto-installer/src/lib.rs b/proxmox-auto-installer/src/lib.rs index e69de29..7813b98 100644 --- a/proxmox-auto-installer/src/lib.rs +++ b/proxmox-auto-installer/src/lib.rs @@ -0,0 +1 @@ +pub mod answer; -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel