[pve-devel] [PATCH manager 1/1] close #3181: ui: display guest name in confirm dialogs
Michael Köppl
m.koeppl at proxmox.com
Tue Mar 25 16:01:46 CET 2025
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 at proxmox.com>
---
www/manager6/grid/BackupView.js | 4 ++++
www/manager6/lxc/CmdMenu.js | 9 ++++++++-
www/manager6/lxc/Config.js | 11 +++++++++--
www/manager6/qemu/CmdMenu.js | 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,
diff --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();
},
diff --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
More information about the pve-devel
mailing list