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

Reply via email to