Signed-off-by: Michael Köppl <m.koe...@proxmox.com> --- proxmox-auto-installer/src/utils.rs | 12 +++++++++++- proxmox-auto-installer/tests/parse-answer.rs | 1 + .../parse_answer_fail/duplicate_disk.json | 3 +++ .../parse_answer_fail/duplicate_disk.toml | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.json create mode 100644 proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.toml
diff --git a/proxmox-auto-installer/src/utils.rs b/proxmox-auto-installer/src/utils.rs index 75696bd..3a1573e 100644 --- a/proxmox-auto-installer/src/utils.rs +++ b/proxmox-auto-installer/src/utils.rs @@ -2,7 +2,10 @@ use anyhow::{Context, Result, bail}; use clap::ValueEnum; use glob::Pattern; use log::info; -use std::{collections::BTreeMap, process::Command}; +use std::{ + collections::{BTreeMap, HashSet}, + process::Command, +}; use crate::{ answer::{ @@ -396,6 +399,13 @@ pub fn verify_disks_settings(answer: &Answer) -> Result<()> { min_disks ); } + + let mut disk_set = HashSet::new(); + for disk in selection { + if !disk_set.insert(disk) { + bail!("List of disks contains duplicate disk {disk}"); + } + } } if let answer::FsOptions::LVM(lvm) = &answer.disks.fs_options { diff --git a/proxmox-auto-installer/tests/parse-answer.rs b/proxmox-auto-installer/tests/parse-answer.rs index e615672..f560483 100644 --- a/proxmox-auto-installer/tests/parse-answer.rs +++ b/proxmox-auto-installer/tests/parse-answer.rs @@ -143,6 +143,7 @@ mod tests { // Keep below entries alphabetically sorted both_password_and_hashed_set, btrfs_raid_single_disk, + duplicate_disk, fqdn_from_dhcp_no_default_domain, fqdn_hostname_only, lvm_maxroot_greater_than_maximum, diff --git a/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.json b/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.json new file mode 100644 index 0000000..d01fabe --- /dev/null +++ b/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.json @@ -0,0 +1,3 @@ +{ + "error": "List of disks contains duplicate disk sda" +} diff --git a/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.toml b/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.toml new file mode 100644 index 0000000..bff1631 --- /dev/null +++ b/proxmox-auto-installer/tests/resources/parse_answer_fail/duplicate_disk.toml @@ -0,0 +1,15 @@ +[global] +keyboard = "de" +country = "at" +fqdn = "btrfs-raid-single-disk.fail.testinstall" +mailto = "mail@no.invalid" +timezone = "Europe/Vienna" +root-password = "12345678" + +[network] +source = "from-dhcp" + +[disk-setup] +filesystem = "btrfs" +btrfs.raid = "raid1" +disk-list = ["sda", "sdb", "sda"] -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel