From: Daniel Kral <d.kral@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 4/5] ui: vm: make cloudinit drive editable
Date: Wed, 16 Oct 2024 18:47:10 +0200 [thread overview]
Message-ID: <20241016164711.934544-5-d.kral@proxmox.com> (raw)
In-Reply-To: <20241016164711.934544-1-d.kral@proxmox.com>
Implements the functionality to allow subsequent changes to the
CloudInit drive under the VM "Hardware" tab. This is needed to implement
further changes in a future commit.
Signed-off-by: Daniel Kral <d.kral@proxmox.com>
---
www/manager6/qemu/CIDriveEdit.js | 100 ++++++++++++++++++++++--------
www/manager6/qemu/HardwareView.js | 4 +-
2 files changed, 77 insertions(+), 27 deletions(-)
diff --git a/www/manager6/qemu/CIDriveEdit.js b/www/manager6/qemu/CIDriveEdit.js
index a9ca8bf1..0494f9c5 100644
--- a/www/manager6/qemu/CIDriveEdit.js
+++ b/www/manager6/qemu/CIDriveEdit.js
@@ -4,28 +4,55 @@ Ext.define('PVE.qemu.CIDriveInputPanel', {
insideWizard: false,
- vmconfig: {}, // used to select usused disks
+ vmconfig: {}, // used to select unused 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);
+ var confid = me.confid || values.controller + values.deviceid;
+
+ // only set these when we create cloudinit files
+ if (me.isCreate) {
+ me.drive.file = values.hdstorage + ":cloudinit";
+ me.drive.format = values.diskformat;
+ }
+
+ params[confid] = PVE.Parser.printQemuDrive(me.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');
+
+ let bussel = me.down('#drive');
+ if (bussel) {
+ bussel.setVMConfig(config, 'cdrom');
+ }
+ },
+
+ setDrive: function(drive) {
+ var me = this;
+
+ var values = {};
+
+ var match = drive.file.match(/^([^:]+):/);
+ if (match) {
+ values.hdstorage = match[1];
+ }
+ values.hdimage = drive.file;
+
+ me.drive = drive;
+
+ me.setValues(values);
},
initComponent: function() {
@@ -33,22 +60,30 @@ Ext.define('PVE.qemu.CIDriveInputPanel', {
me.drive = {};
- me.items = [
- {
+ let items = [];
+
+ if (me.isCreate) {
+ items.push({
xtype: 'pveControllerSelector',
withVirtIO: false,
itemId: 'drive',
fieldLabel: gettext('CloudInit Drive'),
name: 'drive',
- },
- {
- xtype: 'pveDiskStorageSelector',
- itemId: 'storselector',
- storageContent: 'images',
- nodename: me.nodename,
- hideSize: true,
- },
- ];
+ });
+ }
+
+ items.push({
+ xtype: 'pveDiskStorageSelector',
+ itemId: 'storselector',
+ storageContent: 'images',
+ nodename: me.nodename,
+ disabled: !me.isCreate,
+ hideFormat: !me.isCreate,
+ hideSize: true,
+ });
+
+ me.items = items;
+
me.callParent();
},
});
@@ -57,9 +92,6 @@ Ext.define('PVE.qemu.CIDriveEdit', {
extend: 'Proxmox.window.Edit',
xtype: 'pveCIDriveEdit',
- isCreate: true,
- subject: gettext('CloudInit Drive'),
-
initComponent: function() {
var me = this;
@@ -68,17 +100,35 @@ Ext.define('PVE.qemu.CIDriveEdit', {
throw "no node name specified";
}
- me.items = [{
- xtype: 'pveCIDriveInputPanel',
- itemId: 'cipanel',
+ me.isCreate = !me.confid;
+
+ var ipanel = Ext.create('PVE.qemu.CIDriveInputPanel', {
+ confid: me.confid,
nodename: nodename,
- }];
+ isCreate: me.isCreate,
+ });
+
+ Ext.applyIf(me, {
+ subject: gettext('CloudInit Drive'),
+ items: [ipanel],
+ });
me.callParent();
me.load({
success: function(response, opts) {
- me.down('#cipanel').setVMConfig(response.result.data);
+ ipanel.setVMConfig(response.result.data);
+
+ if (me.confid) {
+ var value = response.result.data[me.confid];
+ var drive = PVE.Parser.parseQemuDrive(me.confid, value);
+ if (!drive) {
+ Ext.Msg.alert('Error', 'Unable to parse drive options');
+ me.close();
+ return;
+ }
+ ipanel.setDrive(drive);
+ }
},
});
},
diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index 86d5f4cf..c7a77bd9 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -350,7 +350,7 @@ Ext.define('PVE.qemu.HardwareView', {
if (rowdef.isOnStorageBus) {
let value = me.getObjectValue(rec.data.key, '', true);
if (isCloudInitKey(value)) {
- return;
+ editor = 'PVE.qemu.CIDriveEdit';
} else if (value.match(/media=cdrom/)) {
editor = 'PVE.qemu.CDEdit';
} else if (!diskCap) {
@@ -629,7 +629,7 @@ Ext.define('PVE.qemu.HardwareView', {
remove_btn.RESTMethod = isUnusedDisk || (isDisk && isRunning) ? 'POST' : 'PUT';
edit_btn.setDisabled(
- deleted || !row.editor || isCloudInit || (isCDRom && !cdromCap) || (isDisk && !diskCap));
+ deleted || !row.editor || (isCDRom && !cdromCap) || (isDisk && !diskCap));
diskaction_btn.setDisabled(
pending ||
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2024-10-16 16:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 16:47 [pve-devel] [PATCH kernel/manager 0/5] fix #5430: ocfs2 io_uring read Daniel Kral
2024-10-16 16:47 ` [pve-devel] [PATCH kernel 1/5] fix #5430: cherry-pick fix for ocfs2 io_uring rw issues Daniel Kral
2024-10-17 14:48 ` Friedrich Weber
2024-10-22 14:03 ` [pve-devel] applied: " Thomas Lamprecht
2024-10-16 16:47 ` [pve-devel] [PATCH manager 2/5] ui: vm: factor out async I/O type selector Daniel Kral
2024-10-18 7:42 ` Lukas Wagner
2024-10-16 16:47 ` [pve-devel] [PATCH manager 3/5] fix #5430: ui: vm: allow editing cdrom aio and cache options Daniel Kral
2024-10-18 7:42 ` Lukas Wagner
2024-10-23 11:30 ` Daniel Kral
2024-10-16 16:47 ` Daniel Kral [this message]
2024-10-18 7:42 ` [pve-devel] [PATCH manager 4/5] ui: vm: make cloudinit drive editable Lukas Wagner
2024-10-16 16:47 ` [pve-devel] [PATCH manager 5/5] fix #5430: ui: vm: allow editing cloudinit aio and cache options Daniel Kral
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241016164711.934544-5-d.kral@proxmox.com \
--to=d.kral@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal