From: "Michael Köppl" <m.koeppl@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 1/1] close #3181: ui: display guest name in confirm dialogs
Date: Tue, 25 Mar 2025 16:01:46 +0100 [thread overview]
Message-ID: <20250325150146.213066-3-m.koeppl@proxmox.com> (raw)
In-Reply-To: <20250325150146.213066-1-m.koeppl@proxmox.com>
The confirmation dialogs of the following actions are affected by this
change:
* Remove
* Clone
* Migrate
* Snapshot
* Snapshot rollback
* Backup VM/CT from config view
* Restore VM/CT from config view
The VM/CT name is considered optional in all handled cases. If it is
undefined, the parentheses and the guest name simply will not be
displayed in the dialog window. No exceptions are thrown in case of an
undefined guest name because it only extends the information displayed
to the user and is not essential for performing any of the actions
above.
Signed-off-by: Michael Köppl <m.koeppl@proxmox.com>
---
www/manager6/grid/BackupView.js | 4 ++++
| 9 ++++++++-
www/manager6/lxc/Config.js | 11 +++++++++--
| 9 ++++++++-
www/manager6/qemu/Config.js | 11 +++++++++--
www/manager6/tree/SnapshotTree.js | 3 +++
www/manager6/window/Backup.js | 3 +++
www/manager6/window/Clone.js | 7 ++++++-
www/manager6/window/Migrate.js | 10 +++++++---
www/manager6/window/Restore.js | 3 +++
www/manager6/window/Snapshot.js | 6 +++++-
11 files changed, 65 insertions(+), 11 deletions(-)
diff --git a/www/manager6/grid/BackupView.js b/www/manager6/grid/BackupView.js
index e71d1c88..99f2a49b 100644
--- a/www/manager6/grid/BackupView.js
+++ b/www/manager6/grid/BackupView.js
@@ -39,6 +39,8 @@ Ext.define('PVE.grid.BackupView', {
throw "unsupported VM type '" + vmtype + "'";
}
+ let vmname = me.pveSelNode.data.name;
+
var searchFilter = {
property: 'volid',
value: '',
@@ -167,6 +169,7 @@ Ext.define('PVE.grid.BackupView', {
nodename: nodename,
vmid: vmid,
vmtype: vmtype,
+ vmname: vmname,
storage: storagesel.getValue(),
listeners: {
close: function() {
@@ -189,6 +192,7 @@ Ext.define('PVE.grid.BackupView', {
let win = Ext.create('PVE.window.Restore', {
nodename: nodename,
vmid: vmid,
+ vmname: vmname,
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
--git a/www/manager6/lxc/CmdMenu.js b/www/manager6/lxc/CmdMenu.js
index e30989a6..e4dadd2f 100644
--- a/www/manager6/lxc/CmdMenu.js
+++ b/www/manager6/lxc/CmdMenu.js
@@ -89,7 +89,13 @@ Ext.define('PVE.lxc.CmdMenu', {
text: gettext('Clone'),
iconCls: 'fa fa-fw fa-clone',
hidden: !caps.vms['VM.Clone'],
- handler: () => PVE.window.Clone.wrap(info.node, info.vmid, me.isTemplate, 'lxc'),
+ handler: () => PVE.window.Clone.wrap(
+ info.node,
+ info.vmid,
+ info.name,
+ me.isTemplate,
+ 'lxc',
+ ),
},
{
text: gettext('Migrate'),
@@ -100,6 +106,7 @@ Ext.define('PVE.lxc.CmdMenu', {
vmtype: 'lxc',
nodename: info.node,
vmid: info.vmid,
+ vmname: info.name,
autoShow: true,
});
},
diff --git a/www/manager6/lxc/Config.js b/www/manager6/lxc/Config.js
index a7191fa2..9e33ca56 100644
--- a/www/manager6/lxc/Config.js
+++ b/www/manager6/lxc/Config.js
@@ -100,6 +100,7 @@ Ext.define('PVE.lxc.Config', {
vmtype: 'lxc',
nodename: nodename,
vmid: vmid,
+ vmname: vm.name,
});
win.show();
},
@@ -115,7 +116,13 @@ Ext.define('PVE.lxc.Config', {
iconCls: 'fa fa-fw fa-clone',
hidden: !caps.vms['VM.Clone'],
handler: function() {
- PVE.window.Clone.wrap(nodename, vmid, template, 'lxc');
+ PVE.window.Clone.wrap(
+ nodename,
+ vmid,
+ vm.name,
+ template,
+ 'lxc',
+ );
},
},
{
@@ -156,7 +163,7 @@ Ext.define('PVE.lxc.Config', {
handler: function() {
Ext.create('PVE.window.SafeDestroyGuest', {
url: base_url,
- item: { type: 'CT', id: vmid },
+ item: { type: 'CT', id: vmid, name: vm.name },
taskName: 'vzdestroy',
}).show();
},
--git a/www/manager6/qemu/CmdMenu.js b/www/manager6/qemu/CmdMenu.js
index 7a4e0a0e..e7dd6782 100644
--- a/www/manager6/qemu/CmdMenu.js
+++ b/www/manager6/qemu/CmdMenu.js
@@ -121,6 +121,7 @@ Ext.define('PVE.qemu.CmdMenu', {
vmtype: 'qemu',
nodename: info.node,
vmid: info.vmid,
+ vmname: info.name,
autoShow: true,
});
},
@@ -129,7 +130,13 @@ Ext.define('PVE.qemu.CmdMenu', {
text: gettext('Clone'),
iconCls: 'fa fa-fw fa-clone',
hidden: !caps.vms['VM.Clone'],
- handler: () => PVE.window.Clone.wrap(info.node, info.vmid, me.isTemplate, 'qemu'),
+ handler: () => PVE.window.Clone.wrap(
+ info.node,
+ info.vmid,
+ info.name,
+ me.isTemplate,
+ 'qemu',
+ ),
},
{
text: gettext('Convert to template'),
diff --git a/www/manager6/qemu/Config.js b/www/manager6/qemu/Config.js
index 48eb753e..c4f904e8 100644
--- a/www/manager6/qemu/Config.js
+++ b/www/manager6/qemu/Config.js
@@ -73,6 +73,7 @@ Ext.define('PVE.qemu.Config', {
vmtype: 'qemu',
nodename: nodename,
vmid: vmid,
+ vmname: vm.name,
});
win.show();
},
@@ -88,7 +89,13 @@ Ext.define('PVE.qemu.Config', {
iconCls: 'fa fa-fw fa-clone',
hidden: !caps.vms['VM.Clone'],
handler: function() {
- PVE.window.Clone.wrap(nodename, vmid, template, 'qemu');
+ PVE.window.Clone.wrap(
+ nodename,
+ vmid,
+ vm.name,
+ template,
+ 'qemu',
+ );
},
},
{
@@ -128,7 +135,7 @@ Ext.define('PVE.qemu.Config', {
handler: function() {
Ext.create('PVE.window.SafeDestroyGuest', {
url: base_url,
- item: { type: 'VM', id: vmid },
+ item: { type: 'VM', id: vmid, name: vm.name },
taskName: 'qmdestroy',
}).show();
},
diff --git a/www/manager6/tree/SnapshotTree.js b/www/manager6/tree/SnapshotTree.js
index 97268072..835245c1 100644
--- a/www/manager6/tree/SnapshotTree.js
+++ b/www/manager6/tree/SnapshotTree.js
@@ -50,6 +50,7 @@ Ext.define('PVE.guest.SnapshotTree', {
let win = Ext.create('PVE.window.Snapshot', {
nodename: vm.get('nodename'),
vmid: vm.get('vmid'),
+ vmname: vm.get('vmname'),
viewonly: !vm.get('snapshotAllowed'),
type: vm.get('type'),
isCreate: !edit,
@@ -213,6 +214,8 @@ Ext.define('PVE.guest.SnapshotTree', {
}
vm.set('vmid', view.pveSelNode.data.vmid);
+ vm.set('vmname', view.pveSelNode.data.name);
+
let caps = Ext.state.Manager.get('GuiCap');
vm.set('snapshotAllowed', !!caps.vms['VM.Snapshot']);
vm.set('rollbackAllowed', !!caps.vms['VM.Snapshot.Rollback']);
diff --git a/www/manager6/window/Backup.js b/www/manager6/window/Backup.js
index 4418a9c7..2b0ab153 100644
--- a/www/manager6/window/Backup.js
+++ b/www/manager6/window/Backup.js
@@ -331,6 +331,9 @@ Ext.define('PVE.window.Backup', {
var title = gettext('Backup') + " " +
(me.vmtype === 'lxc' ? "CT" : "VM") +
" " + me.vmid;
+ if (me.vmname) {
+ title += " (" + me.vmname + ")";
+ }
Ext.apply(me, {
title: title,
diff --git a/www/manager6/window/Clone.js b/www/manager6/window/Clone.js
index 2d3f2678..b139cb46 100644
--- a/www/manager6/window/Clone.js
+++ b/www/manager6/window/Clone.js
@@ -21,7 +21,7 @@ Ext.define('PVE.window.Clone', {
statics: {
// display a snapshot selector only if needed
- wrap: function(nodename, vmid, isTemplate, guestType) {
+ wrap: function(nodename, vmid, vmname, isTemplate, guestType) {
Proxmox.Utils.API2Request({
url: '/nodes/' + nodename + '/' + guestType + '/' + vmid +'/snapshot',
failure: function(response, opts) {
@@ -36,6 +36,7 @@ Ext.define('PVE.window.Clone', {
nodename: nodename,
guestType: guestType,
vmid: vmid,
+ vmname: vmname,
isTemplate: isTemplate,
hasSnapshots: hasSnapshots,
}).show();
@@ -155,7 +156,11 @@ Ext.define('PVE.window.Clone', {
if (me.isTemplate) {
titletext += ' Template';
}
+
me.title = "Clone " + titletext + " " + me.vmid;
+ if (me.vmname) {
+ me.title += " (" + me.vmname + ")";
+ }
var col1 = [];
var col2 = [];
diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js
index 78d03921..69792af8 100644
--- a/www/manager6/window/Migrate.js
+++ b/www/manager6/window/Migrate.js
@@ -4,6 +4,7 @@ Ext.define('PVE.window.Migrate', {
vmtype: undefined,
nodename: undefined,
vmid: undefined,
+ vmname: undefined,
maxHeight: 450,
viewModel: {
@@ -92,9 +93,12 @@ Ext.define('PVE.window.Migrate', {
}
vm.set('vmtype', view.vmtype);
- view.setTitle(
- Ext.String.format('{0} {1} {2}', gettext('Migrate'), vm.get(view.vmtype).commonName, view.vmid),
- );
+ let title = Ext.String.format('{0} {1} {2}', gettext('Migrate'), vm.get(view.vmtype).commonName, view.vmid);
+ if (view.vmname) {
+ title += Ext.String.format(" ({0})", view.vmname);
+ }
+ view.setTitle(title);
+
me.lookup('proxmoxHelpButton').setHelpConfig({
onlineHelp: vm.get(view.vmtype).onlineHelp,
});
diff --git a/www/manager6/window/Restore.js b/www/manager6/window/Restore.js
index 6efe1313..d98f3e53 100644
--- a/www/manager6/window/Restore.js
+++ b/www/manager6/window/Restore.js
@@ -357,6 +357,9 @@ Ext.define('PVE.window.Restore', {
let title = gettext('Restore') + ": " + (me.vmtype === 'lxc' ? 'CT' : 'VM');
if (me.vmid) {
title = `${gettext('Overwrite')} ${title} ${me.vmid}`;
+ if (me.vmname) {
+ title += " (" + me.vmname + ")";
+ }
}
Ext.apply(me, {
diff --git a/www/manager6/window/Snapshot.js b/www/manager6/window/Snapshot.js
index 426be7cc..c1816e69 100644
--- a/www/manager6/window/Snapshot.js
+++ b/www/manager6/window/Snapshot.js
@@ -137,7 +137,11 @@ Ext.define('PVE.window.Snapshot', {
let subject;
if (me.isCreate) {
- subject = (me.type === 'qemu' ? 'VM' : 'CT') + me.vmid + ' ' + gettext('Snapshot');
+ subject = (me.type === 'qemu' ? 'VM' : 'CT') + me.vmid;
+ if (me.vmname) {
+ subject += " (" + me.vmname + ")";
+ }
+ subject += ' ' + gettext('Snapshot');
me.method = 'POST';
me.showTaskViewer = true;
} else {
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
prev parent reply other threads:[~2025-03-25 15:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-25 15:01 [pve-devel] [PATCH manager/widget-toolkit 0/2] " Michael Köppl
2025-03-25 15:01 ` [pve-devel] [PATCH widget-toolkit 1/1] close #3181: ui: add guest name to safe destroy dialog window Michael Köppl
2025-03-25 18:27 ` Thomas Lamprecht
2025-03-28 12:03 ` Michael Köppl
2025-03-31 13:37 ` Michael Köppl
2025-03-25 15:01 ` Michael Köppl [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250325150146.213066-3-m.koeppl@proxmox.com \
--to=m.koeppl@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal