and use it on the HardwareView to add/remove and display the CloudInit drives
Signed-off-by: Dominik Csapak <[email protected]> --- www/manager6/Makefile | 1 + www/manager6/qemu/CIDriveEdit.js | 85 +++++++++++++++++++++++++++++++++++++++ www/manager6/qemu/HardwareView.js | 31 ++++++++++++-- 3 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 www/manager6/qemu/CIDriveEdit.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index e6d07ae0..1c7fdf92 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -129,6 +129,7 @@ JSSRC= \ qemu/CreateWizard.js \ qemu/USBEdit.js \ qemu/AgentIPView.js \ + qemu/CIDriveEdit.js \ qemu/SSHKey.js \ qemu/IPConfigEdit.js \ lxc/Summary.js \ diff --git a/www/manager6/qemu/CIDriveEdit.js b/www/manager6/qemu/CIDriveEdit.js new file mode 100644 index 00000000..1148ce4e --- /dev/null +++ b/www/manager6/qemu/CIDriveEdit.js @@ -0,0 +1,85 @@ +Ext.define('PVE.qemu.CIDriveInputPanel', { + extend: 'Proxmox.panel.InputPanel', + xtype: 'pveCIDriveInputPanel', + + insideWizard: false, + + vmconfig: {}, // used to select usused disks + + onGetValues: function(values) { + var me = this; + + var drive = {}; + var params = {}; + drive.file = values.hdstorage + ":cloudinit"; + drive.format = values.diskformat; + params[values.controller + values.deviceid] = PVE.Parser.printQemuDrive(drive); + return params; + }, + + setNodename: function(nodename) { + var me = this; + me.down('#hdstorage').setNodename(nodename); + me.down('#hdimage').setStorage(undefined, nodename); + }, + + setVMConfig: function(config) { + var me = this; + me.down('#drive').setVMConfig(config, 'cdrom'); + }, + + initComponent : function() { + var me = this; + + me.drive = {}; + + me.items = [ + { + xtype: 'pveControllerSelector', + noVirtIO: true, + itemId: 'drive', + fieldLabel: gettext('CloudInit Drive'), + name: 'drive' + }, + { + xtype: 'pveDiskStorageSelector', + itemId: 'storselector', + storageContent: 'images', + nodename: me.nodename, + hideSize: true + } + ]; + me.callParent(); + } +}); + +Ext.define('PVE.qemu.CIDriveEdit', { + extend: 'Proxmox.window.Edit', + xtype: 'pveCIDriveEdit', + + isCreate: true, + subject: gettext('CloudInit Drive'), + + initComponent : function() { + var me = this; + + var nodename = me.pveSelNode.data.node; + if (!nodename) { + throw "no node name specified"; + } + + me.items = [{ + xtype: 'pveCIDriveInputPanel', + itemId: 'cipanel', + nodename: nodename + }]; + + me.callParent(); + + me.load({ + success: function(response, opts) { + me.down('#cipanel').setVMConfig(response.result.data); + } + }); + } +}); diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 04fded6d..e726cb70 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -15,7 +15,10 @@ Ext.define('PVE.qemu.HardwareView', { metaData.tdCls = rowdef.tdCls; if (rowdef.tdCls == 'pve-itype-icon-storage') { var value = me.getObjectValue(key, '', true); - if (value.match(/media=cdrom/)) { + if (value.match(/vm-.*-cloudinit/)) { + metaData.tdCls = 'pve-itype-icon-cloud'; + return rowdef.cloudheader; + } else if (value.match(/media=cdrom/)) { metaData.tdCls = 'pve-itype-icon-cdrom'; return rowdef.cdheader; } @@ -155,7 +158,8 @@ Ext.define('PVE.qemu.HardwareView', { editor: 'PVE.qemu.HDEdit', never_delete: caps.vms['VM.Config.Disk'] ? false : true, header: gettext('Hard Disk') + ' (' + confid +')', - cdheader: gettext('CD/DVD Drive') + ' (' + confid +')' + cdheader: gettext('CD/DVD Drive') + ' (' + confid +')', + cloudheader: gettext('CloudInit Drive') + ' (' + confid + ')' }; }); for (i = 0; i < 32; i++) { @@ -484,12 +488,17 @@ Ext.define('PVE.qemu.HardwareView', { efidisk_menuitem.setDisabled(me.rstore.getData().map.efidisk0 !== undefined); // en/disable usb add button var count = 0; + var hasCloudInit = false; me.rstore.getData().items.forEach(function(item){ if (/^usb\d+/.test(item.id)) { count++; } + if (!hasCloudInit && /vm-.*-cloudinit/.test(item.data.value)) { + hasCloudInit = true; + } }); me.down('#addusb').setDisabled((count >= 5)); + me.down('#addci').setDisabled(hasCloudInit); if (!rec) { remove_btn.disable(); @@ -509,12 +518,14 @@ Ext.define('PVE.qemu.HardwareView', { rowdef.tdCls == 'pve-itype-icon-storage' && (value && !value.match(/media=cdrom/)); + var isCloudInit = (value && value.match(/vm-.*-cloudinit/)); + var isEfi = (key === 'efidisk0'); remove_btn.setDisabled(rec.data['delete'] || (rowdef.never_delete === true)); remove_btn.setText(isUsedDisk ? remove_btn.altText : remove_btn.defaultText); - edit_btn.setDisabled(rec.data['delete'] || !rowdef.editor); + edit_btn.setDisabled(rec.data['delete'] || !rowdef.editor || isCloudInit); resize_btn.setDisabled(pending || !isUsedDisk); @@ -588,6 +599,20 @@ Ext.define('PVE.qemu.HardwareView', { win.on('destroy', reload); win.show(); } + }, + { + text: gettext('CloudInit Drive'), + itemId: 'addci', + iconCls: 'pve-itype-icon-cloud', + disabled: !caps.nodes['Sys.Console'], + handler: function() { + var win = Ext.create('PVE.qemu.CIDriveEdit', { + url: '/api2/extjs/' + baseurl, + pveSelNode: me.pveSelNode + }); + win.on('destroy', reload); + win.show(); + } } ] }) -- 2.11.0 _______________________________________________ pve-devel mailing list [email protected] https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
