It's more appropriate for that type of data, since only one of both variants is ever allowed to be set. Makes it also a bit more ergonomic to handle.
Signed-off-by: Christoph Heiss <c.he...@proxmox.com> --- Changes v1 -> v2: * new patch proxmox-auto-installer/src/utils.rs | 15 +++++++++++---- proxmox-installer-common/src/setup.rs | 9 ++++----- proxmox-tui-installer/src/setup.rs | 5 +---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/proxmox-auto-installer/src/utils.rs b/proxmox-auto-installer/src/utils.rs index 27bbc3b..3378bdd 100644 --- a/proxmox-auto-installer/src/utils.rs +++ b/proxmox-auto-installer/src/utils.rs @@ -368,6 +368,16 @@ pub fn parse_answer( verify_email_and_root_password_settings(answer)?; verify_first_boot_settings(answer)?; + let root_password = match ( + &answer.global.root_password, + &answer.global.root_password_hashed, + ) { + (Some(password), None) => InstallRootPassword::Plain(password.to_owned()), + (None, Some(hashed)) => InstallRootPassword::Hashed(hashed.to_owned()), + // Make the compiler happy, won't be reached anyway due to above checks + _ => bail!("invalid root password setting"), + }; + let mut config = InstallConfig { autoreboot: 1_usize, filesys: filesystem, @@ -386,10 +396,7 @@ pub fn parse_answer( timezone: answer.global.timezone.clone(), keymap: answer.global.keyboard.to_string(), - root_password: InstallRootPassword { - plain: answer.global.root_password.clone(), - hashed: answer.global.root_password_hashed.clone(), - }, + root_password, mailto: answer.global.mailto.clone(), root_ssh_keys: answer.global.root_ssh_keys.clone(), diff --git a/proxmox-installer-common/src/setup.rs b/proxmox-installer-common/src/setup.rs index 4b4920e..4adb168 100644 --- a/proxmox-installer-common/src/setup.rs +++ b/proxmox-installer-common/src/setup.rs @@ -464,11 +464,10 @@ impl Interface { } #[derive(Clone, Deserialize, Serialize)] -pub struct InstallRootPassword { - #[serde(skip_serializing_if = "Option::is_none")] - pub plain: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub hashed: Option<String>, +#[serde(rename_all = "lowercase")] +pub enum InstallRootPassword { + Plain(String), + Hashed(String), } #[derive(Clone, Default, Deserialize, Serialize)] diff --git a/proxmox-tui-installer/src/setup.rs b/proxmox-tui-installer/src/setup.rs index b2a3511..b90c7dc 100644 --- a/proxmox-tui-installer/src/setup.rs +++ b/proxmox-tui-installer/src/setup.rs @@ -27,10 +27,7 @@ impl From<InstallerOptions> for InstallConfig { timezone: options.timezone.timezone, keymap: options.timezone.kb_layout, - root_password: InstallRootPassword { - plain: Some(options.password.root_password), - hashed: None, - }, + root_password: InstallRootPassword::Plain(options.password.root_password), mailto: options.password.email, root_ssh_keys: vec![], -- 2.47.0 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel