pve-manager/www/manager6/qemu/HDMove.js
Stefan Reiter 6d084964b3 ui: add support for adding TPM devices
Inspired by HDEfi for efidisks. Extends the DiskStorageSelector to allow
hiding the format, since tpmstate can only be stored in 'raw' format
(even on directory storages).

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
2021-10-05 07:12:19 +02:00

134 lines
2.7 KiB
JavaScript

Ext.define('PVE.window.HDMove', {
extend: 'Ext.window.Window',
resizable: false,
move_disk: function(disk, storage, format, delete_disk) {
var me = this;
var qemu = me.type === 'qemu';
var params = {};
params.storage = storage;
params[qemu ? 'disk':'volume'] = disk;
if (format && qemu) {
params.format = format;
}
if (delete_disk) {
params.delete = 1;
}
var url = '/nodes/' + me.nodename + '/' + me.type + '/' + me.vmid + '/';
url += qemu ? 'move_disk' : 'move_volume';
Proxmox.Utils.API2Request({
params: params,
url: url,
waitMsgTarget: me,
method: 'POST',
failure: function(response, opts) {
Ext.Msg.alert('Error', response.htmlStatus);
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: upid,
});
win.show();
win.on('destroy', function() { me.close(); });
},
});
},
initComponent: function() {
var me = this;
if (!me.nodename) {
throw "no node name specified";
}
if (!me.vmid) {
throw "no VM ID specified";
}
if (!me.type) {
me.type = 'qemu';
}
var qemu = me.type === 'qemu';
var items = [
{
xtype: 'displayfield',
name: qemu ? 'disk' : 'volume',
value: me.disk,
fieldLabel: qemu ? gettext('Disk') : gettext('Mount Point'),
vtype: 'StorageId',
allowBlank: false,
},
];
items.push({
xtype: 'pveDiskStorageSelector',
storageLabel: gettext('Target Storage'),
nodename: me.nodename,
storageContent: qemu ? 'images' : 'rootdir',
hideSize: true,
hideFormat: me.disk === 'tpmstate0',
});
items.push({
xtype: 'proxmoxcheckbox',
fieldLabel: gettext('Delete source'),
name: 'deleteDisk',
uncheckedValue: 0,
checked: false,
});
me.formPanel = Ext.create('Ext.form.Panel', {
bodyPadding: 10,
border: false,
fieldDefaults: {
labelWidth: 100,
anchor: '100%',
},
items: items,
});
var form = me.formPanel.getForm();
var submitBtn;
me.title = qemu ? gettext("Move disk") : gettext('Move Volume');
submitBtn = Ext.create('Ext.Button', {
text: me.title,
handler: function() {
if (form.isValid()) {
var values = form.getValues();
me.move_disk(me.disk, values.hdstorage, values.diskformat,
values.deleteDisk);
}
},
});
Ext.apply(me, {
modal: true,
width: 350,
border: false,
layout: 'fit',
buttons: [submitBtn],
items: [me.formPanel],
});
me.callParent();
me.mon(me.formPanel, 'validitychange', function(fp, isValid) {
submitBtn.setDisabled(!isValid);
});
me.formPanel.isValid();
},
});