Signed-off-by: Christoph Heiss <c.he...@proxmox.com> --- proxmox-auto-installer/src/utils.rs | 15 +++++++++++---- proxmox-installer-common/src/setup.rs | 23 ++--------------------- proxmox-tui-installer/src/setup.rs | 2 +- 3 files changed, 14 insertions(+), 26 deletions(-)
diff --git a/proxmox-auto-installer/src/utils.rs b/proxmox-auto-installer/src/utils.rs index 202ad41..9ff5e48 100644 --- a/proxmox-auto-installer/src/utils.rs +++ b/proxmox-auto-installer/src/utils.rs @@ -171,7 +171,7 @@ fn set_single_disk( .iter() .find(|item| item.path.ends_with(disk_name.as_str())); match disk { - Some(disk) => config.target_hd = Some(disk.clone()), + Some(disk) => config.target_hd = Some(disk.path.clone()), None => bail!("disk in 'disk_selection' not found"), } } @@ -181,10 +181,10 @@ fn set_single_disk( .disks .iter() .find(|item| item.index == disk_index); - config.target_hd = disk.cloned(); + config.target_hd = disk.map(|d| d.path.clone()); } } - info!("Selected disk: {}", config.target_hd.clone().unwrap().path); + info!("Selected disk: {}", config.target_hd.clone().unwrap()); Ok(()) } @@ -350,7 +350,14 @@ pub fn parse_answer( set_disks(answer, udev_info, runtime_info, &mut config)?; match &answer.disks.fs_options { answer::FsOptions::LVM(lvm) => { - config.hdsize = lvm.hdsize.unwrap_or(config.target_hd.clone().unwrap().size); + let disk = runtime_info + .disks + .iter() + .find(|d| Some(&d.path) == config.target_hd.as_ref()); + + config.hdsize = lvm + .hdsize + .unwrap_or_else(|| disk.map(|d| d.size).unwrap_or_default()); config.swapsize = lvm.swapsize; config.maxroot = lvm.maxroot; config.maxvz = lvm.maxvz; diff --git a/proxmox-installer-common/src/setup.rs b/proxmox-installer-common/src/setup.rs index c581100..9131ac9 100644 --- a/proxmox-installer-common/src/setup.rs +++ b/proxmox-installer-common/src/setup.rs @@ -458,16 +458,8 @@ pub struct InstallConfig { #[serde(skip_serializing_if = "Option::is_none")] pub zfs_opts: Option<InstallZfsOption>, - #[serde( - serialize_with = "serialize_disk_opt", - skip_serializing_if = "Option::is_none", - // only the 'path' property is serialized -> deserialization is problematic - // The information would be present in the 'run-env-info-json', but for now there is no - // need for it in any code that deserializes the low-level config. Therefore we are - // currently skipping it on deserialization - skip_deserializing - )] - pub target_hd: Option<Disk>, + #[serde(skip_serializing_if = "Option::is_none")] + pub target_hd: Option<String>, #[serde(skip_serializing_if = "BTreeMap::is_empty")] pub disk_selection: BTreeMap<String, String>, @@ -491,14 +483,3 @@ pub struct InstallConfig { pub gateway: IpAddr, pub dns: IpAddr, } - -fn serialize_disk_opt<S>(value: &Option<Disk>, serializer: S) -> Result<S::Ok, S::Error> -where - S: Serializer, -{ - if let Some(disk) = value { - serializer.serialize_str(&disk.path) - } else { - serializer.serialize_none() - } -} diff --git a/proxmox-tui-installer/src/setup.rs b/proxmox-tui-installer/src/setup.rs index 8c01e42..3c93e37 100644 --- a/proxmox-tui-installer/src/setup.rs +++ b/proxmox-tui-installer/src/setup.rs @@ -42,7 +42,7 @@ impl From<InstallerOptions> for InstallConfig { match &options.bootdisk.advanced { AdvancedBootdiskOptions::Lvm(lvm) => { config.hdsize = lvm.total_size; - config.target_hd = Some(options.bootdisk.disks[0].clone()); + config.target_hd = Some(options.bootdisk.disks[0].path.clone()); config.swapsize = lvm.swap_size; config.maxroot = lvm.max_root_size; config.minfree = lvm.min_lvm_free; -- 2.45.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel