To avoid having multiple places where the minimum number of disks
required for a certain RAID setup is defined, use get_min_disks in the
common installer RAID config checks as well, keeping the behavior the
same as for the answer file sanity checks.

Signed-off-by: Michael Köppl <m.koe...@proxmox.com>
---
An argument could be made here that there should be a declarative single
source of truth in the form of a JSON or similar that both Perl and
Rust-based installers can use. I would love some input on this as I
think it could make sense, but would require more extensive changes.
We already use JSON files as sources for selectable values, etc. in
other parts of the installer, so we would not be doing anything new
here.

 proxmox-installer-common/src/disk_checks.rs | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/proxmox-installer-common/src/disk_checks.rs 
b/proxmox-installer-common/src/disk_checks.rs
index ecc43bd..1d17e2c 100644
--- a/proxmox-installer-common/src/disk_checks.rs
+++ b/proxmox-installer-common/src/disk_checks.rs
@@ -69,17 +69,16 @@ pub fn check_zfs_raid_config(level: ZfsRaidLevel, disks: 
&[Disk]) -> Result<(),
         }
     };
 
+    check_raid_min_disks(disks, level.get_min_disks())?;
+
     match level {
-        ZfsRaidLevel::Raid0 => check_raid_min_disks(disks, 1)?,
+        ZfsRaidLevel::Raid0 => {}
         ZfsRaidLevel::Raid1 => {
-            check_raid_min_disks(disks, 2)?;
             for disk in disks {
                 check_mirror_size(&disks[0], disk)?;
             }
         }
         ZfsRaidLevel::Raid10 => {
-            check_raid_min_disks(disks, 4)?;
-
             if disks.len() % 2 != 0 {
                 return Err(format!(
                     "Needs an even number of disks, currently selected: {}",
@@ -94,19 +93,16 @@ pub fn check_zfs_raid_config(level: ZfsRaidLevel, disks: 
&[Disk]) -> Result<(),
         }
         // For RAID-Z: minimum disks number is level + 2
         ZfsRaidLevel::RaidZ => {
-            check_raid_min_disks(disks, 3)?;
             for disk in disks {
                 check_mirror_size(&disks[0], disk)?;
             }
         }
         ZfsRaidLevel::RaidZ2 => {
-            check_raid_min_disks(disks, 4)?;
             for disk in disks {
                 check_mirror_size(&disks[0], disk)?;
             }
         }
         ZfsRaidLevel::RaidZ3 => {
-            check_raid_min_disks(disks, 5)?;
             for disk in disks {
                 check_mirror_size(&disks[0], disk)?;
             }
@@ -125,13 +121,7 @@ pub fn check_zfs_raid_config(level: ZfsRaidLevel, disks: 
&[Disk]) -> Result<(),
 /// * `disks` - List of disks designated as RAID targets.
 pub fn check_btrfs_raid_config(level: BtrfsRaidLevel, disks: &[Disk]) -> 
Result<(), String> {
     // See also Proxmox/Install.pm:get_btrfs_raid_setup()
-
-    match level {
-        BtrfsRaidLevel::Raid0 => check_raid_min_disks(disks, 1)?,
-        BtrfsRaidLevel::Raid1 => check_raid_min_disks(disks, 2)?,
-        BtrfsRaidLevel::Raid10 => check_raid_min_disks(disks, 4)?,
-    }
-
+    check_raid_min_disks(disks, level.get_min_disks())?;
     Ok(())
 }
 
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to