}
}, 100);
+ let isPBS = false;
var setStorage = function(storage) {
var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
url += '?content=backup';
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);
},
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
+ isPBS: isPBS,
});
win.show();
win.on('destroy', reload);
}
});
+ let isPBS = me.pluginType === 'pbs';
+
me.tbar = [
{
xtype: 'proxmoxButton',
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
+ isPBS: isPBS,
});
win.show();
win.on('destroy', reload);
pruneButton,
];
- if (me.pluginType === 'pbs') {
+ if (isPBS) {
me.extraColumns = {
encrypted: {
header: gettext('Encrypted'),
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;
{
xtype: 'proxmoxcheckbox',
name: 'start',
+ reference: 'start',
flex: 1,
fieldLabel: gettext('Start after restore'),
labelWidth: 105,
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', {
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) {