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) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 8274D91C43 for ; Wed, 4 Oct 2023 18:03:31 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6C5E010902 for ; Wed, 4 Oct 2023 18:03:31 +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 ; Wed, 4 Oct 2023 18:03:30 +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 6DFFC4489E for ; Wed, 4 Oct 2023 18:03:30 +0200 (CEST) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Wed, 4 Oct 2023 18:00:56 +0200 Message-ID: <20231004160325.704249-3-c.heiss@proxmox.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231004160325.704249-1-c.heiss@proxmox.com> References: <20231004160325.704249-1-c.heiss@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.026 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 Subject: [pve-devel] [PATCH installer 2/3] tui: bootdisk: pass down product info to advanced dialog 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: Wed, 04 Oct 2023 16:03:31 -0000 Enables the advanced and LVM dialog to determine what options (max root/data size and Btrfs RAIDs) by itself, without needing to resort to the global `setup_info()` function. No functional changes. Signed-off-by: Christoph Heiss --- proxmox-tui-installer/src/views/bootdisk.rs | 74 ++++++++++++++------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/proxmox-tui-installer/src/views/bootdisk.rs b/proxmox-tui-installer/src/views/bootdisk.rs index dbd13ea..ba08c8b 100644 --- a/proxmox-tui-installer/src/views/bootdisk.rs +++ b/proxmox-tui-installer/src/views/bootdisk.rs @@ -16,7 +16,7 @@ use crate::{ FsType, LvmBootdiskOptions, ZfsBootdiskOptions, ZfsRaidLevel, FS_TYPES, ZFS_CHECKSUM_OPTIONS, ZFS_COMPRESS_OPTIONS, }, - setup::BootType, + setup::{BootType, ProductConfig}, }; use crate::{setup::ProxmoxProduct, InstallerState}; @@ -37,6 +37,11 @@ impl BootdiskOptionsView { ) .with_name("bootdisk-options-target-disk"); + let product_conf = siv + .user_data::() + .map(|state| state.setup_info.config.clone()) + .unwrap(); // Safety: InstallerState must always be set + let advanced_options = Rc::new(RefCell::new(options.clone())); let advanced_button = LinearLayout::horizontal() @@ -45,7 +50,11 @@ impl BootdiskOptionsView { let disks = disks.to_owned(); let options = advanced_options.clone(); move |siv| { - siv.add_layer(advanced_options_view(&disks, options.clone())); + siv.add_layer(advanced_options_view( + &disks, + options.clone(), + product_conf.clone(), + )); } })); @@ -95,10 +104,9 @@ struct AdvancedBootdiskOptionsView { } impl AdvancedBootdiskOptionsView { - fn new(disks: &[Disk], options: &BootdiskOptions) -> Self { - let enable_btrfs = crate::setup_info().config.enable_btrfs; - - let filter_btrfs = |fstype: &&FsType| -> bool { enable_btrfs || !fstype.is_btrfs() }; + fn new(disks: &[Disk], options: &BootdiskOptions, product_conf: ProductConfig) -> Self { + let filter_btrfs = + |fstype: &&FsType| -> bool { product_conf.enable_btrfs || !fstype.is_btrfs() }; let fstype_select = SelectView::new() .popup() @@ -126,7 +134,10 @@ impl AdvancedBootdiskOptionsView { .child(DummyView.full_width()); match &options.advanced { - AdvancedBootdiskOptions::Lvm(lvm) => view.add_child(LvmBootdiskOptionsView::new(lvm)), + AdvancedBootdiskOptions::Lvm(lvm) => view.add_child(LvmBootdiskOptionsView::new( + lvm, + product_conf.product == ProxmoxProduct::PVE, + )), AdvancedBootdiskOptions::Zfs(zfs) => { view.add_child(ZfsBootdiskOptionsView::new(disks, zfs)) } @@ -139,6 +150,11 @@ impl AdvancedBootdiskOptionsView { } fn fstype_on_submit(siv: &mut Cursive, disks: &[Disk], fstype: &FsType) { + let is_pve = siv + .user_data::() + .map(|state| state.setup_info.config.product == ProxmoxProduct::PVE) + .unwrap_or_default(); + siv.call_on_name("advanced-bootdisk-options-dialog", |view: &mut Dialog| { if let Some(AdvancedBootdiskOptionsView { view }) = view.get_content_mut().downcast_mut() @@ -147,6 +163,7 @@ impl AdvancedBootdiskOptionsView { match fstype { FsType::Ext4 | FsType::Xfs => view.add_child(LvmBootdiskOptionsView::new( &LvmBootdiskOptions::defaults_from(&disks[0]), + is_pve, )), FsType::Zfs(_) => view.add_child(ZfsBootdiskOptionsView::new( disks, @@ -240,11 +257,11 @@ impl ViewWrapper for AdvancedBootdiskOptionsView { struct LvmBootdiskOptionsView { view: FormView, + has_extra_fields: bool, } impl LvmBootdiskOptionsView { - fn new(options: &LvmBootdiskOptions) -> Self { - let is_pve = crate::setup_info().config.product == ProxmoxProduct::PVE; + fn new(options: &LvmBootdiskOptions, show_extra_fields: bool) -> Self { // TODO: Set maximum accordingly to disk size let view = FormView::new() .child( @@ -258,12 +275,12 @@ impl LvmBootdiskOptionsView { DiskSizeEditView::new_emptyable().content_maybe(options.swap_size), ) .child_conditional( - is_pve, + show_extra_fields, "Maximum root volume size", DiskSizeEditView::new_emptyable().content_maybe(options.max_root_size), ) .child_conditional( - is_pve, + show_extra_fields, "Maximum data volume size", DiskSizeEditView::new_emptyable().content_maybe(options.max_data_size), ) @@ -272,22 +289,24 @@ impl LvmBootdiskOptionsView { DiskSizeEditView::new_emptyable().content_maybe(options.min_lvm_free), ); - Self { view } + Self { + view, + has_extra_fields: show_extra_fields, + } } fn get_values(&mut self) -> Option { - let is_pve = crate::setup_info().config.product == ProxmoxProduct::PVE; - let min_lvm_free_id = if is_pve { 4 } else { 2 }; - let max_root_size = if is_pve { - self.view.get_value::(2) - } else { - None - }; - let max_data_size = if is_pve { - self.view.get_value::(3) - } else { - None - }; + let min_lvm_free_id = if self.has_extra_fields { 4 } else { 2 }; + + let max_root_size = self + .has_extra_fields + .then(|| self.view.get_value::(2)) + .flatten(); + let max_data_size = self + .has_extra_fields + .then(|| self.view.get_value::(3)) + .flatten(); + Some(LvmBootdiskOptions { total_size: self.view.get_value::(0)?, swap_size: self.view.get_value::(1), @@ -552,10 +571,15 @@ impl ViewWrapper for ZfsBootdiskOptionsView { cursive::wrap_impl!(self.view: MultiDiskOptionsView); } -fn advanced_options_view(disks: &[Disk], options: Rc>) -> impl View { +fn advanced_options_view( + disks: &[Disk], + options: Rc>, + product_conf: ProductConfig, +) -> impl View { Dialog::around(AdvancedBootdiskOptionsView::new( disks, &(*options).borrow(), + product_conf, )) .title("Advanced bootdisk options") .button("Ok", { -- 2.42.0