* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.