From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 568DA9063C for ; Tue, 2 Apr 2024 14:04:11 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3184850FB for ; Tue, 2 Apr 2024 14:03:41 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 2 Apr 2024 14:03:40 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id E5AAB44A40 for ; Tue, 2 Apr 2024 14:03:39 +0200 (CEST) Date: Tue, 2 Apr 2024 14:03:38 +0200 From: Christoph Heiss To: Aaron Lauterer Cc: Proxmox VE development discussion Message-ID: References: <20240328135028.504520-1-a.lauterer@proxmox.com> <20240328135028.504520-16-a.lauterer@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240328135028.504520-16-a.lauterer@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.000 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 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. [utils.rs, proxmox-fetch-answer.rs] Subject: Re: [pve-devel] [PATCH v3 15/30] auto-installer: add fetch answer binary 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: , X-List-Received-Date: Tue, 02 Apr 2024 12:04:11 -0000 Two typos ;) And some small nits On Thu, Mar 28, 2024 at 02:50:13PM +0100, Aaron Lauterer wrote: [..] > diff --git a/proxmox-auto-installer/src/bin/proxmox-fetch-answer.rs b/proxmox-auto-installer/src/bin/proxmox-fetch-answer.rs > new file mode 100644 > index 0000000..9e89a3c > --- /dev/null > +++ b/proxmox-auto-installer/src/bin/proxmox-fetch-answer.rs [..] > +fn main() -> ExitCode { > + if let Err(err) = init_log() { > + panic!("could not initilize logging: {err}"); ^^^^^^^^^ typo And for consistency sake, capitalize the first word here too as done everywhere else? > + } > + > + info!("Fetching answer file"); > + let answer = match fetch_answer() { > + Ok(answer) => answer, > + Err(err) => { > + error!("Aborting: {}", err); > + return ExitCode::FAILURE; > + } > + }; > + > + let mut child = match Command::new("proxmox-auto-installer") > + .stdout(Stdio::inherit()) > + .stdin(Stdio::piped()) > + .stderr(Stdio::null()) > + .spawn() > + { > + Ok(child) => child, > + Err(err) => panic!("Failed to start automatic installation: {}", err), Very much a nit; but above always inline format-strings (i.e. "{err}") are used, from here on out mostly explicit parameters. Maybe unify them and use the former consistenly where possible? E.g. below in `utils.rs` are some more instances > + }; > + > + let mut stdin = child.stdin.take().expect("Failed to open stdin"); > + std::thread::spawn(move || { > + stdin > + .write_all(answer.as_bytes()) > + .expect("Failed to write to stdin"); > + }); [..] > diff --git a/proxmox-auto-installer/src/fetch_plugins/utils.rs b/proxmox-auto-installer/src/fetch_plugins/utils.rs > new file mode 100644 > index 0000000..82cd3e0 > --- /dev/null > +++ b/proxmox-auto-installer/src/fetch_plugins/utils.rs > @@ -0,0 +1,90 @@ > +use anyhow::{bail, Result}; > +use log::{info, warn}; > +use std::{ > + fs::create_dir_all, > + path::{Path, PathBuf}, > + process::Command, > +}; > + > +/// Searches for upper and lower case existence of the partlabel in the search_path > +/// > +/// # Arguemnts > +/// * `partlabel_lower` - Partition Label in lower case > +/// * `search_path` - Path where to search for the partiiton label > +/// search_path: String Stray last line? > +pub fn scan_partlabels(partlabel_lower: &str, search_path: &str) -> Result { > + let partlabel = partlabel_lower.to_uppercase(); > + let path = Path::new(search_path).join(partlabel.clone()); ^^^^^^^^^^^^^^^^^ Can be `&partlabel` > + match path.try_exists() { > + Ok(true) => { > + info!("Found partition with label '{}'", partlabel); > + return Ok(path); > + } > + Ok(false) => info!("Did not detect partition with label '{}'", partlabel), > + Err(err) => info!("Encountered issue, accessing '{}': {}", path.display(), err), > + } > + > + let partlabel = partlabel_lower.to_lowercase(); Since you explicitly convert it to lowercase anyway here, I'd say name `partlabel_lower` does not make much sense (anymore)? > + let path = Path::new(search_path).join(partlabel.clone()); ^^^^^^^^^^^^^^^^^ Same here > + match path.try_exists() { > + Ok(true) => { > + info!("Found partition with label '{}'", partlabel); > + return Ok(path); > + } > + Ok(false) => info!("Did not detect partition with label '{}'", partlabel), > + Err(err) => info!("Encountered issue, accessing '{}': {}", path.display(), err), > + } > + bail!( > + "Could not detect upper or lower case labels for '{}'", > + partlabel_lower > + ); > +} > + [..] > +/// Tries to unmount the specified path. Will warn on errors, but not fail. > +/// > +/// # Arguemnts > +/// * `target_path` - path to unmount > +pub fn umount_part(target_path: &str) -> Result<()> { > + info!("Unmounting partitiona at {target_path}"); ^^^^^^^^^^ typo > + match Command::new("umount").arg(target_path).output() { > + Ok(output) => { > + if output.status.success() { > + Ok(()) > + } else { > + warn!("Error unmounting: {}", String::from_utf8(output.stderr)?); > + Ok(()) > + } > + } > + Err(err) => { > + warn!("Error unmounting: {}", err); > + Ok(()) > + } > + } > +}