all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pdm-devel] [PATCH datacenter-manager] ui: pve: mask node shell if pve-manager is too old
@ 2025-12-03 14:04 Fabian Grünbichler
  2025-12-03 14:41 ` [pdm-devel] applied: " Dominik Csapak
  0 siblings, 1 reply; 2+ messages in thread
From: Fabian Grünbichler @ 2025-12-03 14:04 UTC (permalink / raw)
  To: pdm-devel

by passing along the version and comparing it when loading the shell view.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---

Notes:
    PBS doesn't yet have the machinery in place to query the PBS version AFAICT,
    but once it has, a similar check can disable the shell button there..

 ui/src/pve/mod.rs      |  8 +++++++-
 ui/src/pve/node/mod.rs | 31 +++++++++++++++++++++++++++----
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/ui/src/pve/mod.rs b/ui/src/pve/mod.rs
index d0d038d..712191a 100644
--- a/ui/src/pve/mod.rs
+++ b/ui/src/pve/mod.rs
@@ -193,7 +193,13 @@ impl LoadableComponent for PveRemoteComp {
         let content: Html = match &self.view {
             PveTreeNode::Root => remote::PveRemotePanel::new(remote.clone()).into(),
             PveTreeNode::Node(node) => {
-                node::PveNodePanel::new(remote.clone(), node.node.clone()).into()
+                let pve_manager = match &self.updates.data {
+                    Some(updates) => extract_package_version(updates, &node.node, "pve-manager"),
+                    None => None,
+                };
+                node::PveNodePanel::new(remote.clone(), node.node.clone())
+                    .pve_manager_version(pve_manager)
+                    .into()
             }
             PveTreeNode::Qemu(qemu) => {
                 let pve_manager = match &self.updates.data {
diff --git a/ui/src/pve/node/mod.rs b/ui/src/pve/node/mod.rs
index eb7ceb3..056f15c 100644
--- a/ui/src/pve/node/mod.rs
+++ b/ui/src/pve/node/mod.rs
@@ -1,6 +1,7 @@
 use std::rc::Rc;
 
 use gloo_utils::window;
+use proxmox_deb_version::Version;
 use proxmox_yew_comp::{AptPackageManager, ConsoleType, NotesView, XTermJs};
 use yew::virtual_dom::{VComp, VNode};
 
@@ -10,6 +11,7 @@ use pwt::{
     props::{ContainerBuilder, WidgetBuilder},
     widget::{Fa, Row, TabBarItem, TabPanel},
 };
+use pwt_macros::builder;
 
 mod overview;
 
@@ -18,12 +20,18 @@ use overview::PveNodeOverviewPanel;
 use crate::get_deep_url;
 
 #[derive(Clone, Debug, Eq, PartialEq, Properties)]
+#[builder]
 pub struct PveNodePanel {
     /// The remote to show
     pub remote: String,
 
     /// The node to show
     pub node: String,
+
+    #[prop_or_default]
+    #[builder]
+    /// The nodes pve-manager version, used to feature gate some entries.
+    pve_manager_version: Option<Version>,
 }
 
 impl PveNodePanel {
@@ -133,11 +141,26 @@ impl yew::Component for PveNodePanelComp {
                 {
                     let remote = props.remote.clone();
                     let node = props.node.clone();
+                    let supported = props
+                        .pve_manager_version
+                        .as_ref()
+                        .map(|ver| ver >= &Version::new("9.1.0", None))
+                        .unwrap_or(true);
                     move |_| {
-                        let mut xtermjs = XTermJs::new();
-                        xtermjs.set_node_name(node.clone());
-                        xtermjs.set_console_type(ConsoleType::RemotePveLoginShell(remote.clone()));
-                        xtermjs.into()
+                        if supported {
+                            let mut xtermjs = XTermJs::new();
+                            xtermjs.set_node_name(node.clone());
+                            xtermjs
+                                .set_console_type(ConsoleType::RemotePveLoginShell(remote.clone()));
+                            xtermjs.into()
+                        } else {
+                            Row::new()
+                                .class(pwt::css::FlexFit)
+                                .class(pwt::css::JustifyContent::Center)
+                                .class(pwt::css::AlignItems::Center)
+                                .with_child(html! { tr!("pve-manager version too old") })
+                                .into()
+                        }
                     }
                 },
             )
-- 
2.47.3



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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [pdm-devel] applied: [PATCH datacenter-manager] ui: pve: mask node shell if pve-manager is too old
  2025-12-03 14:04 [pdm-devel] [PATCH datacenter-manager] ui: pve: mask node shell if pve-manager is too old Fabian Grünbichler
@ 2025-12-03 14:41 ` Dominik Csapak
  0 siblings, 0 replies; 2+ messages in thread
From: Dominik Csapak @ 2025-12-03 14:41 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion,
	Fabian Grünbichler

applied, thanks!


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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-12-03 14:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-03 14:04 [pdm-devel] [PATCH datacenter-manager] ui: pve: mask node shell if pve-manager is too old Fabian Grünbichler
2025-12-03 14:41 ` [pdm-devel] applied: " Dominik Csapak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal