mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-12 11:38:01 +00:00

It is currently unclear howto restrict storages for container usage. The 'rootdir' property does not work anymore, because we can now create containers on normal VM image files.
137 lines
2.9 KiB
JavaScript
137 lines
2.9 KiB
JavaScript
Ext.define('PVE.window.Restore', {
|
|
extend: 'Ext.window.Window', // fixme: PVE.window.Edit?
|
|
|
|
resizable: false,
|
|
|
|
initComponent : function() {
|
|
var me = this;
|
|
|
|
if (!me.nodename) {
|
|
throw "no node name specified";
|
|
}
|
|
|
|
if (!me.volid) {
|
|
throw "no volume ID specified";
|
|
}
|
|
|
|
if (!me.vmtype) {
|
|
throw "no vmtype specified";
|
|
}
|
|
|
|
var storagesel = Ext.create('PVE.form.StorageSelector', {
|
|
nodename: me.nodename,
|
|
name: 'storage',
|
|
value: '',
|
|
fieldLabel: gettext('Storage'),
|
|
storageContent: 'images,rootdir',
|
|
allowBlank: true
|
|
});
|
|
|
|
me.formPanel = Ext.create('Ext.form.Panel', {
|
|
bodyPadding: 10,
|
|
border: false,
|
|
fieldDefaults: {
|
|
labelWidth: 100,
|
|
anchor: '100%'
|
|
},
|
|
items: [
|
|
{
|
|
xtype: 'displayfield',
|
|
value: me.volidText || me.volid,
|
|
fieldLabel: gettext('Source')
|
|
},
|
|
storagesel,
|
|
{
|
|
xtype: me.vmid ? 'displayfield' : 'pveVMIDSelector',
|
|
name: 'vmid',
|
|
fieldLabel: 'VM ID',
|
|
value: me.vmid,
|
|
loadNextFreeVMID: me.vmid ? false: true,
|
|
validateExists: false
|
|
}
|
|
]
|
|
});
|
|
|
|
var form = me.formPanel.getForm();
|
|
|
|
var doRestore = function(url, params) {
|
|
PVE.Utils.API2Request({
|
|
url: url,
|
|
params: params,
|
|
method: 'POST',
|
|
waitMsgTarget: me,
|
|
failure: function (response, opts) {
|
|
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
|
},
|
|
success: function(response, options) {
|
|
var upid = response.result.data;
|
|
|
|
var win = Ext.create('PVE.window.TaskViewer', {
|
|
upid: upid
|
|
});
|
|
win.show();
|
|
me.close();
|
|
}
|
|
});
|
|
};
|
|
|
|
var submitBtn = Ext.create('Ext.Button', {
|
|
text: gettext('Restore'),
|
|
handler: function(){
|
|
var storage = storagesel.getValue();
|
|
var values = form.getValues();
|
|
|
|
var params = {
|
|
storage: storage,
|
|
vmid: me.vmid || values.vmid,
|
|
force: me.vmid ? 1 : 0
|
|
};
|
|
|
|
var url;
|
|
if (me.vmtype === 'lxc') {
|
|
url = '/nodes/' + me.nodename + '/lxc';
|
|
params.ostemplate = me.volid;
|
|
params.restore = 1;
|
|
} else if (me.vmtype === 'qemu') {
|
|
url = '/nodes/' + me.nodename + '/qemu';
|
|
params.archive = me.volid;
|
|
} else {
|
|
throw 'unknown VM type';
|
|
}
|
|
|
|
if (me.vmid) {
|
|
var msg = gettext('Are you sure you want to restore this VM?') + ' ' +
|
|
gettext('This will permanently erase current VM data.');
|
|
Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
|
|
if (btn !== 'yes') {
|
|
return;
|
|
}
|
|
doRestore(url, params);
|
|
});
|
|
} else {
|
|
doRestore(url, params);
|
|
}
|
|
}
|
|
});
|
|
|
|
form.on('validitychange', function(f, valid) {
|
|
submitBtn.setDisabled(!valid);
|
|
});
|
|
|
|
var title = (me.vmtype === 'lxc') ? gettext('Restore CT') :
|
|
gettext('Restore VM');
|
|
|
|
Ext.apply(me, {
|
|
title: title,
|
|
width: 500,
|
|
modal: true,
|
|
layout: 'auto',
|
|
border: false,
|
|
items: [ me.formPanel ],
|
|
buttons: [ submitBtn ]
|
|
});
|
|
|
|
me.callParent();
|
|
}
|
|
});
|