From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 21AAB1FF15E for ; Fri, 18 Oct 2024 13:59:56 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CDCA631991; Fri, 18 Oct 2024 14:00:23 +0200 (CEST) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Fri, 18 Oct 2024 13:59:40 +0200 Message-ID: <20241018115943.813243-5-c.heiss@proxmox.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20241018115943.813243-1-c.heiss@proxmox.com> References: <20241018115943.813243-1-c.heiss@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [partition.rs, main.rs, proxmox.com] Subject: [pve-devel] [PATCH installer 4/4] fetch-answer: use partition label from fetch config instead of hardcoded X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" This has been requested by at least one user one user [0] and definitely makes sense, esp. for BMCs/IPMIs where one might not be able to control the partition label. [0] https://forum.proxmox.com/threads/proxmox-ais-question-request.153043/post-695689 Signed-off-by: Christoph Heiss --- .../src/fetch_plugins/partition.rs | 13 +++++------ proxmox-fetch-answer/src/main.rs | 23 +++++++++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/proxmox-fetch-answer/src/fetch_plugins/partition.rs b/proxmox-fetch-answer/src/fetch_plugins/partition.rs index cbfe2d5..c68dc59 100644 --- a/proxmox-fetch-answer/src/fetch_plugins/partition.rs +++ b/proxmox-fetch-answer/src/fetch_plugins/partition.rs @@ -9,17 +9,16 @@ use std::{ static ANSWER_FILE: &str = "answer.toml"; static ANSWER_MP: &str = "/mnt/answer"; // FAT can only handle 11 characters, so shorten Automated Installer Source to AIS -static PARTLABEL: &str = "proxmox-ais"; static DISK_BY_ID_PATH: &str = "/dev/disk/by-label"; pub struct FetchFromPartition; impl FetchFromPartition { /// Returns the contents of the answer file - pub fn get_answer() -> Result { + pub fn get_answer(part_label: &str) -> Result { info!("Checking for answer file on partition."); - let mut mount_path = PathBuf::from(mount_proxmoxinst_part()?); + let mut mount_path = PathBuf::from(mount_proxmoxinst_part(part_label)?); mount_path.push(ANSWER_FILE); let answer = fs::read_to_string(mount_path) .map_err(|err| format_err!("failed to read answer file - {err}"))?; @@ -74,14 +73,14 @@ fn scan_partlabels(partlabel: &str, search_path: &str) -> Result { bail!("Could not find partition for label '{partlabel}'"); } -/// Will search and mount a partition/FS labeled PARTLABEL (proxmox-ais) in lower or uppercase -/// to ANSWER_MP -fn mount_proxmoxinst_part() -> Result { +/// Will search and mount a partition/FS labeled labeled `part_label` in lower or uppercase to +/// ANSWER_MP +fn mount_proxmoxinst_part(part_label: &str) -> Result { if let Ok(true) = check_if_mounted(ANSWER_MP) { info!("Skipping: '{ANSWER_MP}' is already mounted."); return Ok(ANSWER_MP.into()); } - let part_path = scan_partlabels(PARTLABEL, DISK_BY_ID_PATH)?; + let part_path = scan_partlabels(part_label, DISK_BY_ID_PATH)?; info!("Mounting partition at {ANSWER_MP}"); // create dir for mountpoint create_dir_all(ANSWER_MP)?; diff --git a/proxmox-fetch-answer/src/main.rs b/proxmox-fetch-answer/src/main.rs index 753ab29..d56f8b9 100644 --- a/proxmox-fetch-answer/src/main.rs +++ b/proxmox-fetch-answer/src/main.rs @@ -26,6 +26,7 @@ Commands: http Fetch the answer file via HTTP(S) Additional parameters: [] [] partition Fetch the answer file from a mountable partition + Additional parameters: [] Options: -h, --help Print this help menu @@ -49,10 +50,12 @@ fn fetch_answer(install_settings: &AutoInstSettings) -> Result { Err(err) => info!("Fetching answer file from ISO failed: {err}"), } } - FetchAnswerFrom::Partition => match FetchFromPartition::get_answer() { - Ok(answer) => return Ok(answer), - Err(err) => info!("Fetching answer file from partition failed: {err}"), - }, + FetchAnswerFrom::Partition => { + match FetchFromPartition::get_answer(&install_settings.partition_label) { + Ok(answer) => return Ok(answer), + Err(err) => info!("Fetching answer file from partition failed: {err}"), + } + } FetchAnswerFrom::Http => match FetchFromHTTP::get_answer(&install_settings.http) { Ok(answer) => return Ok(answer), Err(err) => info!("Fetching answer file via HTTP failed: {err}"), @@ -74,18 +77,24 @@ fn settings_from_cli_args(args: &[String]) -> Result { }; match mode { - FetchAnswerFrom::Iso | FetchAnswerFrom::Partition if args.len() > 2 => { - bail!("'iso' and 'partition' modes do not take any additional arguments") + FetchAnswerFrom::Iso if args.len() > 2 => { + bail!("'iso' mode does not take any additional arguments") } FetchAnswerFrom::Http if args.len() > 4 => { bail!("'http' mode takes at most 2 additional arguments") } + FetchAnswerFrom::Partition if args.len() > 3 => { + bail!("'partition' mode takes at most 1 additional argument") + } _ => {} }; Ok(AutoInstSettings { mode, - partition_label: "proxmox-ais".to_owned(), + partition_label: args + .get(2) + .ok_or(format_err!("partition label expected")) + .cloned()?, http: HttpOptions { url: args.get(2).cloned(), cert_fingerprint: args.get(3).cloned(), -- 2.46.0 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel