Implements the functionality to allow changes to the CloudInit drive under the VM "Hardware" tab after it has already been created by the user.
Signed-off-by: Daniel Kral <d.k...@proxmox.com> --- www/manager6/qemu/CIDriveEdit.js | 63 +++++++++++++++++++++++++------ www/manager6/qemu/HardwareView.js | 4 +- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/www/manager6/qemu/CIDriveEdit.js b/www/manager6/qemu/CIDriveEdit.js index 006f9565..d12124e8 100644 --- a/www/manager6/qemu/CIDriveEdit.js +++ b/www/manager6/qemu/CIDriveEdit.js @@ -9,14 +9,16 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { onGetValues: function(values) { let me = this; - let drive = {}; let params = {}; - let confid = values.controller + values.deviceid; + let confid = me.confid || values.controller + values.deviceid; - drive.file = values.hdstorage + ":cloudinit"; - drive.format = values.diskformat; + // only set these when we create cloudinit files + if (me.isCreate) { + me.drive.file = values.hdstorage + ":cloudinit"; + me.drive.format = values.diskformat; + } - params[confid] = PVE.Parser.printQemuDrive(drive); + params[confid] = PVE.Parser.printQemuDrive(me.drive); return params; }, @@ -31,7 +33,25 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { setVMConfig: function(config) { let me = this; - me.busSelector.setVMConfig(config, 'cdrom'); + if (me.busSelector) { + me.busSelector.setVMConfig(config, 'cdrom'); + } + }, + + setDrive: function(drive) { + let me = this; + + let values = {}; + + let match = drive.file.match(/^([^:]+):/); + if (match) { + values.hdstorage = match[1]; + } + values.hdimage = drive.file; + + me.drive = drive; + + me.setValues(values); }, initComponent: function() { @@ -41,10 +61,12 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { let items = []; - me.busSelector = Ext.create('PVE.form.ControllerSelector', { - withVirtIO: false, - fieldLabel: gettext('CloudInit Drive'), - }); + if (me.isCreate) { + me.busSelector = Ext.create('PVE.form.ControllerSelector', { + withVirtIO: false, + fieldLabel: gettext('CloudInit Drive'), + }); + } items.push(me.busSelector); items.push({ @@ -52,6 +74,8 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { itemId: 'storselector', storageContent: 'images', nodename: me.nodename, + disabled: !me.isCreate, + hideFormat: !me.isCreate, hideSize: true, }); @@ -65,8 +89,6 @@ Ext.define('PVE.qemu.CIDriveEdit', { extend: 'Proxmox.window.Edit', xtype: 'pveCIDriveEdit', - isCreate: true, - initComponent: function() { let me = this; @@ -75,8 +97,12 @@ Ext.define('PVE.qemu.CIDriveEdit', { throw "no node name specified"; } + me.isCreate = !me.confid; + let ipanel = Ext.create('PVE.qemu.CIDriveInputPanel', { + confid: me.confid, nodename: nodename, + isCreate: me.isCreate, }); Ext.applyIf(me, { @@ -89,6 +115,19 @@ Ext.define('PVE.qemu.CIDriveEdit', { me.load({ success: function(response, opts) { ipanel.setVMConfig(response.result.data); + + if (me.confid) { + let value = response.result.data[me.confid]; + let drive = PVE.Parser.parseQemuDrive(me.confid, value); + + if (!drive) { + Ext.Msg.alert('Error', 'Unable to parse drive options'); + me.close(); + return; + } + + ipanel.setDrive(drive); + } }, }); }, diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 86d5f4cf..c7a77bd9 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -350,7 +350,7 @@ Ext.define('PVE.qemu.HardwareView', { if (rowdef.isOnStorageBus) { let value = me.getObjectValue(rec.data.key, '', true); if (isCloudInitKey(value)) { - return; + editor = 'PVE.qemu.CIDriveEdit'; } else if (value.match(/media=cdrom/)) { editor = 'PVE.qemu.CDEdit'; } else if (!diskCap) { @@ -629,7 +629,7 @@ Ext.define('PVE.qemu.HardwareView', { remove_btn.RESTMethod = isUnusedDisk || (isDisk && isRunning) ? 'POST' : 'PUT'; edit_btn.setDisabled( - deleted || !row.editor || isCloudInit || (isCDRom && !cdromCap) || (isDisk && !diskCap)); + deleted || !row.editor || (isCDRom && !cdromCap) || (isDisk && !diskCap)); diskaction_btn.setDisabled( pending || -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel