pve-manager/www/manager6/storage/BackupView.js
Fabian Grünbichler 4c02fcfd0a file-restore: pass in full volume ID
not just the snapshot name.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2021-04-23 15:32:10 +02:00

160 lines
3.7 KiB
JavaScript

Ext.define('PVE.storage.BackupView', {
extend: 'PVE.storage.ContentView',
alias: 'widget.pveStorageBackupView',
initComponent: function() {
var me = this;
var nodename = me.nodename = me.pveSelNode.data.node;
if (!nodename) {
throw "no node name specified";
}
var storage = me.storage = me.pveSelNode.data.storage;
if (!storage) {
throw "no storage ID specified";
}
me.content = 'backup';
var sm = me.sm = Ext.create('Ext.selection.RowModel', {});
var reload = function() {
me.store.load();
};
let pruneButton = Ext.create('Proxmox.button.Button', {
text: gettext('Prune group'),
disabled: true,
selModel: sm,
setBackupGroup: function(backup) {
if (backup) {
let name = backup.text;
let vmid = backup.vmid;
let format = backup.format;
let vmtype;
if (name.startsWith('vzdump-lxc-') || format === "pbs-ct") {
vmtype = 'lxc';
} else if (name.startsWith('vzdump-qemu-') || format === "pbs-vm") {
vmtype = 'qemu';
}
if (vmid && vmtype) {
this.setText(gettext('Prune group') + ` ${vmtype}/${vmid}`);
this.vmid = vmid;
this.vmtype = vmtype;
this.setDisabled(false);
return;
}
}
this.setText(gettext('Prune group'));
this.vmid = null;
this.vmtype = null;
this.setDisabled(true);
},
handler: function(b, e, rec) {
let win = Ext.create('PVE.window.Prune', {
nodename: nodename,
storage: storage,
backup_id: this.vmid,
backup_type: this.vmtype,
});
win.show();
win.on('destroy', reload);
},
});
me.on('selectionchange', function(model, srecords, eOpts) {
if (srecords.length === 1) {
pruneButton.setBackupGroup(srecords[0].data);
} else {
pruneButton.setBackupGroup(null);
}
});
let isPBS = me.pluginType === 'pbs';
me.tbar = [
{
xtype: 'proxmoxButton',
text: gettext('Restore'),
selModel: sm,
disabled: true,
handler: function(b, e, rec) {
var vmtype;
if (PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format)) {
vmtype = 'qemu';
} else if (PVE.Utils.volume_is_lxc_backup(rec.data.volid, rec.data.format)) {
vmtype = 'lxc';
} else {
return;
}
var win = Ext.create('PVE.window.Restore', {
nodename: nodename,
volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype,
isPBS: isPBS,
});
win.show();
win.on('destroy', reload);
},
},
{
xtype: 'proxmoxButton',
text: gettext('Show Configuration'),
disabled: true,
selModel: sm,
handler: function(b, e, rec) {
var win = Ext.create('PVE.window.BackupConfig', {
volume: rec.data.volid,
pveSelNode: me.pveSelNode,
});
win.show();
},
},
pruneButton,
];
if (isPBS) {
me.extraColumns = {
encrypted: {
header: gettext('Encrypted'),
dataIndex: 'encrypted',
renderer: PVE.Utils.render_backup_encryption,
},
verification: {
header: gettext('Verify State'),
dataIndex: 'verification',
renderer: PVE.Utils.render_backup_verification,
},
};
me.tbar.push({
xtype: 'proxmoxButton',
text: gettext('File Restore'),
disabled: true,
selModel: sm,
handler: function(b, e, rec) {
Ext.create('Proxmox.window.FileBrowser', {
title: gettext('File Restore') + " - " + rec.data.text,
listURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/list`,
downloadURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/download`,
extraParams: {
volume: rec.data.volid,
},
archive: PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format) ?
'all' : undefined,
}).show();
},
});
}
me.callParent();
},
});