mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-06-05 15:45:41 +00:00
194 lines
4.4 KiB
JavaScript
194 lines
4.4 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);
|
|
},
|
|
},
|
|
];
|
|
if (isPBS) {
|
|
me.tbar.push({
|
|
xtype: 'proxmoxButton',
|
|
text: gettext('File Restore'),
|
|
disabled: true,
|
|
selModel: sm,
|
|
handler: function(b, e, rec) {
|
|
let isVMArchive = PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format);
|
|
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: isVMArchive ? 'all' : undefined,
|
|
autoShow: true,
|
|
});
|
|
},
|
|
});
|
|
}
|
|
me.tbar.push(
|
|
{
|
|
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();
|
|
},
|
|
},
|
|
{
|
|
xtype: 'proxmoxButton',
|
|
text: gettext('Edit Notes'),
|
|
disabled: true,
|
|
selModel: sm,
|
|
handler: function(b, e, rec) {
|
|
let volid = rec.data.volid;
|
|
Ext.create('Proxmox.window.Edit', {
|
|
autoLoad: true,
|
|
width: 600,
|
|
height: 400,
|
|
resizable: true,
|
|
title: gettext('Notes'),
|
|
url: `/api2/extjs/nodes/${nodename}/storage/${me.storage}/content/${volid}`,
|
|
layout: 'fit',
|
|
items: [
|
|
{
|
|
xtype: 'textarea',
|
|
layout: 'fit',
|
|
name: 'notes',
|
|
height: '100%',
|
|
},
|
|
],
|
|
listeners: {
|
|
destroy: () => reload(),
|
|
},
|
|
}).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.callParent();
|
|
},
|
|
});
|