[pve-devel] [PATCH v2 manager 11/11] ui: restore: add live-restore checkbox
Stefan Reiter
s.reiter at proxmox.com
Wed Mar 3 10:56:12 CET 2021
Add 'isPBS' parameter for Restore window so we can detect when to show
the 'live-restore' checkbox.
Includes a warning about this feature being experimental for now.
Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---
v2:
* unchanged
www/manager6/grid/BackupView.js | 6 ++++-
www/manager6/storage/BackupView.js | 5 +++-
www/manager6/window/Restore.js | 38 +++++++++++++++++++++++++++++-
3 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/www/manager6/grid/BackupView.js b/www/manager6/grid/BackupView.js
index 2a496fab..38f127c9 100644
--- a/www/manager6/grid/BackupView.js
+++ b/www/manager6/grid/BackupView.js
@@ -79,6 +79,7 @@ Ext.define('PVE.grid.BackupView', {
}
}, 100);
+ let isPBS = false;
var setStorage = function(storage) {
var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
url += '?content=backup';
@@ -101,13 +102,15 @@ Ext.define('PVE.grid.BackupView', {
change: function(f, value) {
let storage = f.getStore().findRecord('storage', value, 0, false, true, true);
if (storage) {
- let isPBS = storage.data.type === 'pbs';
+ isPBS = storage.data.type === 'pbs';
me.getColumns().forEach((column) => {
let id = column.dataIndex;
if (id === 'verification' || id === 'encrypted') {
column.setHidden(!isPBS);
}
});
+ } else {
+ isPBS = false;
}
setStorage(value);
},
@@ -176,6 +179,7 @@ Ext.define('PVE.grid.BackupView', {
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
+ isPBS: isPBS,
});
win.show();
win.on('destroy', reload);
diff --git a/www/manager6/storage/BackupView.js b/www/manager6/storage/BackupView.js
index 87d446ca..3dd500c2 100644
--- a/www/manager6/storage/BackupView.js
+++ b/www/manager6/storage/BackupView.js
@@ -74,6 +74,8 @@ Ext.define('PVE.storage.BackupView', {
}
});
+ let isPBS = me.pluginType === 'pbs';
+
me.tbar = [
{
xtype: 'proxmoxButton',
@@ -95,6 +97,7 @@ Ext.define('PVE.storage.BackupView', {
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
+ isPBS: isPBS,
});
win.show();
win.on('destroy', reload);
@@ -117,7 +120,7 @@ Ext.define('PVE.storage.BackupView', {
pruneButton,
];
- if (me.pluginType === 'pbs') {
+ if (isPBS) {
me.extraColumns = {
encrypted: {
header: gettext('Encrypted'),
diff --git a/www/manager6/window/Restore.js b/www/manager6/window/Restore.js
index d220c7bf..d9cb12a0 100644
--- a/www/manager6/window/Restore.js
+++ b/www/manager6/window/Restore.js
@@ -3,6 +3,20 @@ Ext.define('PVE.window.Restore', {
resizable: false,
+ controller: {
+ xclass: 'Ext.app.ViewController',
+ control: {
+ '#liveRestore': {
+ change: function(el, newVal) {
+ let liveWarning = this.lookupReference('liveWarning');
+ liveWarning.setHidden(!newVal);
+ let start = this.lookupReference('start');
+ start.setDisabled(newVal);
+ },
+ },
+ },
+ },
+
initComponent: function() {
var me = this;
@@ -84,6 +98,7 @@ Ext.define('PVE.window.Restore', {
{
xtype: 'proxmoxcheckbox',
name: 'start',
+ reference: 'start',
flex: 1,
fieldLabel: gettext('Start after restore'),
labelWidth: 105,
@@ -99,6 +114,26 @@ Ext.define('PVE.window.Restore', {
value: true,
fieldLabel: gettext('Unprivileged container'),
});
+ } else if (me.vmtype === 'qemu') {
+ items.push({
+ xtype: 'proxmoxcheckbox',
+ name: 'live-restore',
+ itemId: 'liveRestore',
+ flex: 1,
+ fieldLabel: gettext('Live restore'),
+ checked: false,
+ hidden: !me.isPBS,
+ // align checkbox with 'start' if 'unique' is hidden
+ labelWidth: me.vmid ? 105 : 100,
+ });
+ items.push({
+ xtype: 'displayfield',
+ reference: 'liveWarning',
+ // TODO: Remove once more tested/stable?
+ value: gettext('Warning: Live-restore is experimental! The VM will start immediately (with a disk performance penalty) and restore will happen in the background. If anything goes wrong, data written by the VM during the restore will be lost.'),
+ userCls: 'pmx-hint',
+ hidden: true,
+ });
}
me.formPanel = Ext.create('Ext.form.Panel', {
@@ -144,7 +179,8 @@ Ext.define('PVE.window.Restore', {
force: me.vmid ? 1 : 0,
};
if (values.unique) { params.unique = 1; }
- if (values.start) { params.start = 1; }
+ if (values.start && !values['live-restore']) { params.start = 1; }
+ if (values['live-restore']) { params['live-restore'] = 1; }
if (values.storage) { params.storage = values.storage; }
if (values.bwlimit !== undefined) {
--
2.20.1
More information about the pve-devel
mailing list