]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Backup.js
1 Ext
.define('PVE.window.Backup', {
2 extend
: 'Ext.window.Window',
6 initComponent: function() {
10 throw "no node name specified";
14 throw "no VM ID specified";
18 throw "no VM type specified";
21 let compressionSelector
= Ext
.create('PVE.form.CompressionSelector', {
24 fieldLabel
: gettext('Compression'),
27 let modeSelector
= Ext
.create('PVE.form.BackupModeSelector', {
28 fieldLabel
: gettext('Mode'),
33 let mailtoField
= Ext
.create('Ext.form.field.Text', {
34 fieldLabel
: gettext('Send email to'),
36 emptyText
: Proxmox
.Utils
.noneText
,
40 ['keep-last', gettext('Keep Last')],
41 ['keep-hourly', gettext('Keep Hourly')],
42 ['keep-daily', gettext('Keep Daily')],
43 ['keep-weekly', gettext('Keep Weekly')],
44 ['keep-monthly', gettext('Keep Monthly')],
45 ['keep-yearly', gettext('Keep Yearly')],
48 let pruneSettings
= keepNames
.map(
49 name
=> Ext
.create('Ext.form.field.Display', {
56 let removeCheckbox
= Ext
.create('Proxmox.form.Checkbox', {
61 fieldLabel
: gettext('Prune'),
64 'data-qtip': gettext('Prune older backups afterwards'),
66 handler: function(checkbox
, value
) {
67 pruneSettings
.forEach(field
=> field
.setHidden(!value
));
68 me
.down('label[name="pruneLabel"]').setHidden(!value
);
72 let initialDefaults
= false;
74 var storagesel
= Ext
.create('PVE.form.StorageSelector', {
75 nodename
: me
.nodename
,
77 fieldLabel
: gettext('Storage'),
78 storageContent
: 'backup',
81 change: function(f
, v
) {
82 if (!initialDefaults
) {
86 if (v
=== null || v
=== undefined || v
=== '') {
90 let store
= f
.getStore();
91 let rec
= store
.findRecord('storage', v
, 0, false, true, true);
93 if (rec
&& rec
.data
&& rec
.data
.type
=== 'pbs') {
94 compressionSelector
.setValue('zstd');
95 compressionSelector
.setDisabled(true);
96 } else if (!compressionSelector
.getEditable()) {
97 compressionSelector
.setDisabled(false);
100 Proxmox
.Utils
.API2Request({
101 url
: `/nodes/${me.nodename}/vzdump/defaults`,
107 success: function(response
, opts
) {
108 const data
= response
.result
.data
;
110 if (!initialDefaults
&& data
.mailto
!== undefined) {
111 mailtoField
.setValue(data
.mailto
);
113 if (!initialDefaults
&& data
.mode
!== undefined) {
114 modeSelector
.setValue(data
.mode
);
117 initialDefaults
= true;
119 // always update storage dependent properties
120 if (data
['prune-backups'] !== undefined) {
121 const keepParams
= PVE
.Parser
.parsePropertyString(
122 data
["prune-backups"],
124 if (!keepParams
['keep-all']) {
125 removeCheckbox
.setHidden(false);
126 pruneSettings
.forEach(function(field
) {
127 const keep
= keepParams
[field
.name
];
129 field
.setValue(keep
);
138 // no defaults or keep-all=1
139 removeCheckbox
.setHidden(true);
140 removeCheckbox
.setValue(false);
141 pruneSettings
.forEach(field
=> field
.reset());
143 failure: function(response
, opts
) {
144 initialDefaults
= true;
146 removeCheckbox
.setHidden(true);
147 removeCheckbox
.setValue(false);
148 pruneSettings
.forEach(field
=> field
.reset());
150 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
157 me
.formPanel
= Ext
.create('Proxmox.panel.InputPanel', {
173 text
: gettext('Storage Retention Configuration') + ':',
212 var submitBtn
= Ext
.create('Ext.Button', {
213 text
: gettext('Backup'),
214 handler: function() {
215 var storage
= storagesel
.getValue();
216 let values
= me
.formPanel
.getValues();
221 remove
: values
.remove
,
225 params
.mailto
= values
.mailto
;
228 if (values
.compress
) {
229 params
.compress
= values
.compress
;
232 Proxmox
.Utils
.API2Request({
233 url
: '/nodes/' + me
.nodename
+ '/vzdump',
236 failure: function(response
, opts
) {
237 Ext
.Msg
.alert('Error', response
.htmlStatus
);
239 success: function(response
, options
) {
240 // close later so we reload the grid
241 // after the task has completed
244 var upid
= response
.result
.data
;
246 var win
= Ext
.create('Proxmox.window.TaskViewer', {
260 var helpBtn
= Ext
.create('Proxmox.button.Help', {
261 onlineHelp
: 'chapter_vzdump',
262 listenToGlobalEvent
: false,
266 var title
= gettext('Backup') + " " +
267 (me
.vmtype
=== 'lxc' ? "CT" : "VM") +
275 items
: [me
.formPanel
],
276 buttons
: [helpBtn
, '->', submitBtn
],
278 afterrender: function() {
279 /// cleared within the storage selector's change listener
280 me
.setLoading(gettext('Please wait...'));
281 storagesel
.setValue(me
.storage
);