* [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