1 Ext
.define('PVE.grid.BackupView', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: ['widget.pveBackupView'],
6 onlineHelp
: 'chapter_vzdump',
9 stateId
: 'grid-guest-backup',
11 initComponent: function() {
14 var nodename
= me
.pveSelNode
.data
.node
;
16 throw "no node name specified";
19 var vmid
= me
.pveSelNode
.data
.vmid
;
21 throw "no VM ID specified";
24 var vmtype
= me
.pveSelNode
.data
.type
;
26 throw "no VM type specified";
30 if (vmtype
=== 'lxc' || vmtype
=== 'openvz') {
31 vmtypeFilter = function(item
) {
32 return PVE
.Utils
.volume_is_lxc_backup(item
.data
.volid
, item
.data
.format
);
34 } else if (vmtype
=== 'qemu') {
35 vmtypeFilter = function(item
) {
36 return PVE
.Utils
.volume_is_qemu_backup(item
.data
.volid
, item
.data
.format
);
39 throw "unsupported VM type '" + vmtype
+ "'";
55 me
.store
= Ext
.create('Ext.data.Store', {
56 model
: 'pve-storage-content',
68 let updateFilter = function() {
76 var reload
= Ext
.Function
.createBuffered(function() {
83 var setStorage = function(storage
) {
84 var url
= '/api2/json/nodes/' + nodename
+ '/storage/' + storage
+ '/content';
85 url
+= '?content=backup';
95 var storagesel
= Ext
.create('PVE.form.StorageSelector', {
97 fieldLabel
: gettext('Storage'),
99 storageContent
: 'backup',
102 change: function(f
, value
) {
103 let storage
= f
.getStore().findRecord('storage', value
, 0, false, true, true);
105 isPBS
= storage
.data
.type
=== 'pbs';
106 me
.getColumns().forEach((column
) => {
107 let id
= column
.dataIndex
;
108 if (id
=== 'verification' || id
=== 'encrypted') {
109 column
.setHidden(!isPBS
);
120 var storagefilter
= Ext
.create('Ext.form.field.Text', {
121 fieldLabel
: gettext('Search'),
124 enableKeyEvents
: true,
125 value
: searchFilter
.value
,
128 keyup: function(field
) {
129 me
.store
.clearFilter(true);
130 searchFilter
.value
= field
.getValue();
136 var vmidfilterCB
= Ext
.create('Ext.form.field.Checkbox', {
137 boxLabel
: gettext('Filter VMID'),
140 change: function(cb
, value
) {
141 vmidFilter
.value
= value
? vmid
: '';
142 vmidFilter
.exactMatch
= !!value
;
148 var sm
= Ext
.create('Ext.selection.RowModel', {});
150 var backup_btn
= Ext
.create('Ext.button.Button', {
151 text
: gettext('Backup now'),
152 handler: function() {
153 var win
= Ext
.create('PVE.window.Backup', {
157 storage
: storagesel
.getValue(),
168 var restore_btn
= Ext
.create('Proxmox.button.Button', {
169 text
: gettext('Restore'),
172 enableFn: function(rec
) {
175 handler: function(b
, e
, rec
) {
176 let win
= Ext
.create('PVE.window.Restore', {
179 volid
: rec
.data
.volid
,
180 volidText
: PVE
.Utils
.render_storage_content(rec
.data
.volid
, {}, rec
),
185 win
.on('destroy', reload
);
189 var delete_btn
= Ext
.create('Proxmox.button.StdRemoveButton', {
193 confirmMsg: function(rec
) {
194 var msg
= Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
195 "'" + rec
.data
.volid
+ "'");
196 msg
+= " " + gettext('This will permanently erase all data.');
200 getUrl: function(rec
) {
201 var storage
= storagesel
.getValue();
202 return '/nodes/' + nodename
+ '/storage/' + storage
+ '/content/' + rec
.data
.volid
;
204 callback: function() {
209 var config_btn
= Ext
.create('Proxmox.button.Button', {
210 text
: gettext('Show Configuration'),
213 enableFn: function(rec
) {
216 handler: function(b
, e
, rec
) {
217 var storage
= storagesel
.getValue();
222 var win
= Ext
.create('PVE.window.BackupConfig', {
223 volume
: rec
.data
.volid
,
224 pveSelNode
: me
.pveSelNode
,
231 let file_restore_btn
= Ext
.create('Proxmox.button.Button', {
232 text
: gettext('File Restore'),
235 enableFn: function(rec
) {
236 return !!rec
&& isPBS
;
238 handler: function(b
, e
, rec
) {
239 var storage
= storagesel
.getValue();
240 Ext
.create('Proxmox.window.FileBrowser', {
241 title
: gettext('File Restore') + " - " + rec
.data
.text
,
242 listURL
: `/api2/json/nodes/localhost/storage/${storage}/file-restore/list`,
243 downloadURL
: `/api2/json/nodes/localhost/storage/${storage}/file-restore/download`,
245 volume
: rec
.data
.volid
,
247 archive
: PVE
.Utils
.volume_is_qemu_backup(rec
.data
.volid
, rec
.data
.format
) ?
256 overflowHandler
: 'scroller',
266 xtype
: 'proxmoxButton',
267 text
: gettext('Edit Notes'),
269 handler: function() {
270 let volid
= sm
.getSelection()[0].data
.volid
;
271 var storage
= storagesel
.getValue();
272 Ext
.create('Proxmox.window.Edit', {
277 title
: gettext('Notes'),
278 url
: `/api2/extjs/nodes/${nodename}/storage/${storage}/content/${volid}`,
289 destroy
: () => reload(),
303 header
: gettext('Name'),
306 renderer
: PVE
.Utils
.render_storage_content
,
310 header
: gettext('Notes'),
313 renderer
: Ext
.htmlEncode
,
316 header
: gettext('Date'),
321 header
: gettext('Format'),
326 header
: gettext('Size'),
328 renderer
: Proxmox
.Utils
.format_size
,
332 header
: gettext('VMID'),
337 header
: gettext('Encrypted'),
338 dataIndex
: 'encrypted',
339 renderer
: PVE
.Utils
.render_backup_encryption
,
342 header
: gettext('Verify State'),
343 dataIndex
: 'verification',
344 renderer
: PVE
.Utils
.render_backup_verification
,