public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH v2 pve-manager 0/2] cloudinit pending behaviour change
@ 2021-06-09 12:02 Alexandre Derumier
  2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 1/2] ui: cloudinit : use new cloudinit config api Alexandre Derumier
  2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 2/2] ui: add cloudinit hotplug option Alexandre Derumier
  0 siblings, 2 replies; 3+ messages in thread
From: Alexandre Derumier @ 2021-06-09 12:02 UTC (permalink / raw)
  To: pve-devel

Implement new cloudinit api from last qemu-server patch serie.

I don't have tuned it yet, the rstore is polling the api each second,
 so extract the config from cloudinit drive each time.
I need to check how to load it once or when regenerated only.


Changelog v2:

- rebase to last master

Alexandre Derumier (2):
  ui: cloudinit : use new cloudinit config api
  ui: add cloudinit hotplug option

 www/manager6/Utils.js                       |  2 +
 www/manager6/form/HotplugFeatureSelector.js |  4 +
 www/manager6/qemu/CloudInit.js              | 85 +++++++++------------
 3 files changed, 43 insertions(+), 48 deletions(-)

-- 
2.20.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] [PATCH v2 pve-manager 1/2] ui: cloudinit : use new cloudinit config api
  2021-06-09 12:02 [pve-devel] [PATCH v2 pve-manager 0/2] cloudinit pending behaviour change Alexandre Derumier
@ 2021-06-09 12:02 ` Alexandre Derumier
  2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 2/2] ui: add cloudinit hotplug option Alexandre Derumier
  1 sibling, 0 replies; 3+ messages in thread
From: Alexandre Derumier @ 2021-06-09 12:02 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 www/manager6/qemu/CloudInit.js | 85 +++++++++++++++-------------------
 1 file changed, 37 insertions(+), 48 deletions(-)

diff --git a/www/manager6/qemu/CloudInit.js b/www/manager6/qemu/CloudInit.js
index 77ff93d4..573d2945 100644
--- a/www/manager6/qemu/CloudInit.js
+++ b/www/manager6/qemu/CloudInit.js
@@ -82,38 +82,12 @@ Ext.define('PVE.qemu.CloudInit', {
 	    text: gettext('Regenerate Image'),
 	    handler: function() {
 		let view = this.up('grid');
-		var eject_params = {};
-		var insert_params = {};
-		let disk = PVE.Parser.parseQemuDrive(view.ciDriveId, view.ciDrive);
-		var storage = '';
-		var stormatch = disk.file.match(/^([^:]+):/);
-		if (stormatch) {
-		    storage = stormatch[1];
-		}
-		eject_params[view.ciDriveId] = 'none,media=cdrom';
-		insert_params[view.ciDriveId] = storage + ':cloudinit';
-
-		var failure = function(response, opts) {
-		    Ext.Msg.alert('Error', response.htmlStatus);
-		};
-
 		Proxmox.Utils.API2Request({
-		    url: view.baseurl + '/config',
+		    url: view.baseurl + '/cloudinit',
 		    waitMsgTarget: view,
 		    method: 'PUT',
-		    params: eject_params,
-		    failure: failure,
 		    callback: function() {
-			Proxmox.Utils.API2Request({
-			    url: view.baseurl + '/config',
-			    waitMsgTarget: view,
-			    method: 'PUT',
-			    params: insert_params,
-			    failure: failure,
-			    callback: function() {
-				view.reload();
-			    },
-			});
+			view.reload();
 		    },
 		});
 	    },
@@ -133,13 +107,20 @@ Ext.define('PVE.qemu.CloudInit', {
 		return;
 	    }
 	    var id = record.data.key;
+	    var pending = record.data.pending;
 	    var value = record.data.value;
 	    var ciregex = new RegExp("vm-" + me.pveSelNode.data.vmid + "-cloudinit");
-		if (id.match(/^(ide|scsi|sata)\d+$/) && ciregex.test(value)) {
+	    if (id.match(/^(ide|scsi|sata)\d+$/)) {
+		if (ciregex.test(pending)) {
+		    found = id;
+		    me.ciDriveId = found;
+		    me.ciDrive = pending;
+		} else if (ciregex.test(value)) {
 		    found = id;
 		    me.ciDriveId = found;
 		    me.ciDrive = value;
 		}
+	    }
 	});
 
 	me.down('#savebtn').setDisabled(!found);
@@ -168,6 +149,10 @@ Ext.define('PVE.qemu.CloudInit', {
 	    var me = this;
 	    me.rstore.startUpdate();
 	},
+	destroy: function() {
+	    var me = this;
+	    me.rstore.stopUpdate();
+	},
 	itemdblclick: function() {
 	    var me = this;
 	    me.run_editor();
@@ -188,13 +173,21 @@ Ext.define('PVE.qemu.CloudInit', {
 	}
 	var caps = Ext.state.Manager.get('GuiCap');
 	me.baseurl = '/api2/extjs/nodes/' + nodename + '/qemu/' + vmid;
-	me.url = me.baseurl + '/pending';
+	me.url = me.baseurl + '/cloudinit';
 	me.editorConfig.url = me.baseurl + '/config';
 	me.editorConfig.pveSelNode = me.pveSelNode;
 
 	let caps_ci = caps.vms['VM.Config.Cloudinit'] || caps.vms['VM.Config.Network'];
 	/* editor is string and object */
+
 	me.rows = {
+	    cicustom: {
+		header: gettext('Custom Config'),
+		iconCls: 'fa fa-cogs',
+		editor: undefined,
+		never_delete: true,
+		defaultValue: '',
+	    },
 	    ciuser: {
 		header: gettext('User'),
 		iconCls: 'fa fa-user',
@@ -239,6 +232,13 @@ Ext.define('PVE.qemu.CloudInit', {
 		    return value || Proxmox.Utils.noneText;
 		},
 	    },
+	    name: {
+		header: gettext('Hostname'),
+		iconCls: 'fa fa-globe',
+		editor: undefined,
+		never_delete: true,
+		defaultValue: '',
+	    },
 	    searchdomain: {
 		header: gettext('DNS domain'),
 		iconCls: 'fa fa-globe',
@@ -288,35 +288,24 @@ Ext.define('PVE.qemu.CloudInit', {
 	    },
 	};
 	var i;
-	var ipconfig_renderer = function(value, md, record, ri, ci, store, pending) {
-	    var id = record.data.key;
-	    var match = id.match(/^net(\d+)$/);
-	    var val = '';
-	    if (match) {
-		val = me.getObjectValue('ipconfig'+match[1], '', pending);
-	    }
-	    return val;
-	};
+
 	for (i = 0; i < 32; i++) {
-	    // we want to show an entry for every network device
-	    // even if it is empty
-	    me.rows['net' + i.toString()] = {
-		multiKey: ['ipconfig' + i.toString(), 'net' + i.toString()],
+	    me.rows['ipconfig' + i.toString()] = {
 		header: gettext('IP Config') + ' (net' + i.toString() +')',
 		editor: caps.vms['VM.Config.Network'] ? 'PVE.qemu.IPConfigEdit' : undefined,
 		iconCls: 'fa fa-exchange',
-		renderer: ipconfig_renderer,
-	    };
-	    me.rows['ipconfig' + i.toString()] = {
-		visible: false,
+		visible: true,
 	    };
 	}
 
 	PVE.Utils.forEachBus(['ide', 'scsi', 'sata'], function(type, id) {
 	    me.rows[type+id] = {
-		visible: false,
+		title: 'Cloud-Init',
+		iconCls: 'fa fa-cloud',
+		never_delete: true,
 	    };
 	});
+
 	me.callParent();
 	me.mon(me.rstore, 'load', me.set_button_status, me);
     },
-- 
2.20.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] [PATCH v2 pve-manager 2/2] ui: add cloudinit hotplug option
  2021-06-09 12:02 [pve-devel] [PATCH v2 pve-manager 0/2] cloudinit pending behaviour change Alexandre Derumier
  2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 1/2] ui: cloudinit : use new cloudinit config api Alexandre Derumier
@ 2021-06-09 12:02 ` Alexandre Derumier
  1 sibling, 0 replies; 3+ messages in thread
From: Alexandre Derumier @ 2021-06-09 12:02 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 www/manager6/Utils.js                       | 2 ++
 www/manager6/form/HotplugFeatureSelector.js | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index d9567979..23babb8b 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -444,6 +444,8 @@ Ext.define('PVE.Utils', {
 		fa.push(gettext('Memory'));
 	    } else if (el === 'cpu') {
 		fa.push(gettext('CPU'));
+	    } else if (el === 'cloudinit') {
+		fa.push(gettext('Cloudinit'));
 	    } else {
 		fa.push(el);
 	    }
diff --git a/www/manager6/form/HotplugFeatureSelector.js b/www/manager6/form/HotplugFeatureSelector.js
index cb9fc552..ffb19918 100644
--- a/www/manager6/form/HotplugFeatureSelector.js
+++ b/www/manager6/form/HotplugFeatureSelector.js
@@ -33,6 +33,10 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
 	    boxLabel: gettext('CPU'),
 	    inputValue: 'cpu',
 	},
+	{
+	    boxLabel: 'Cloudinit',
+	    inputValue: 'cloudinit',
+	},
     ],
 
     setValue: function(value) {
-- 
2.20.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-06-09 12:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-09 12:02 [pve-devel] [PATCH v2 pve-manager 0/2] cloudinit pending behaviour change Alexandre Derumier
2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 1/2] ui: cloudinit : use new cloudinit config api Alexandre Derumier
2021-06-09 12:02 ` [pve-devel] [PATCH v2 pve-manager 2/2] ui: add cloudinit hotplug option Alexandre Derumier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal