[pdm-devel] [PATCH proxmox-yew-comp 1/3] xtermjs: add remote PVE support
Fabian Grünbichler
f.gruenbichler at proxmox.com
Tue Nov 11 09:29:21 CET 2025
by defining a new ConsoleType containing the remote type and name.
Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
Notes:
v1:
- encode remote name in ConsoleType variant, drop Copy, drop additional
parameters (Thanks Dominik!)
src/xtermjs.rs | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/xtermjs.rs b/src/xtermjs.rs
index 4eb464d..9656516 100644
--- a/src/xtermjs.rs
+++ b/src/xtermjs.rs
@@ -47,7 +47,7 @@ impl XTermJs {
// FIXME: separate noVNC and xterm.js, this is not a nice interface!
/// Open a new terminal window.
pub fn open_xterm_js_viewer(console_type: ConsoleType, node_name: &str, vnc: bool) {
- let url = xtermjs_url(console_type, node_name, vnc);
+ let url = xtermjs_url(&console_type, node_name, vnc);
let target = "_blank";
let features =
"toolbar=no,location=no,status=no,menubar=no,resizable=yes,width=800,height=420";
@@ -66,20 +66,21 @@ impl XTermJs {
}
}
-#[derive(Copy, Clone, PartialEq)]
+#[derive(Clone, PartialEq)]
pub enum ConsoleType {
KVM(u64),
LXC(u64),
UpgradeShell,
LoginShell,
+ RemotePveLoginShell(String),
}
-fn xtermjs_url(console_type: ConsoleType, node_name: &str, vnc: bool) -> String {
+fn xtermjs_url(console_type: &ConsoleType, node_name: &str, vnc: bool) -> String {
let console = match console_type {
ConsoleType::KVM(_vmid) => "kvm",
ConsoleType::LXC(_vmid) => "lxc",
ConsoleType::UpgradeShell => "upgrade",
- ConsoleType::LoginShell => "shell",
+ ConsoleType::LoginShell | ConsoleType::RemotePveLoginShell(_) => "shell",
};
let mut param = json!({
@@ -96,15 +97,20 @@ fn xtermjs_url(console_type: ConsoleType, node_name: &str, vnc: bool) -> String
match console_type {
ConsoleType::KVM(vmid) => {
- param["vmid"] = vmid.into();
+ param["vmid"] = (*vmid).into();
}
ConsoleType::LXC(vmid) => {
- param["vmid"] = vmid.into();
+ param["vmid"] = (*vmid).into();
}
ConsoleType::UpgradeShell => { /* no additional parameters required */ }
ConsoleType::LoginShell => {
param["cmd"] = "login".into();
}
+ ConsoleType::RemotePveLoginShell(remote_name) => {
+ param["cmd"] = "login".into();
+ param["remote-type"] = "pve".into();
+ param["remote"] = remote_name.as_str().into();
+ }
}
format!("?{}", json_object_to_query(param).unwrap())
@@ -122,7 +128,7 @@ impl Component for ProxmoxXTermJs {
fn view(&self, ctx: &Context<Self>) -> Html {
let props = ctx.props();
- let url = xtermjs_url(props.console_type, &props.node_name, props.vnc);
+ let url = xtermjs_url(&props.console_type, &props.node_name, props.vnc);
html! {<iframe class="pwt-flex-fit" src={format!("/{url}")}/>}
}
}
--
2.47.3
More information about the pdm-devel
mailing list