From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 4082C1FF15E for <inbox@lore.proxmox.com>; Tue, 8 Apr 2025 14:13:22 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B2FC41AD39; Tue, 8 Apr 2025 14:13:16 +0200 (CEST) From: Dominik Csapak <d.csapak@proxmox.com> To: pve-devel@lists.proxmox.com Date: Tue, 8 Apr 2025 14:13:10 +0200 Message-Id: <20250408121312.312526-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250408121312.312526-1-d.csapak@proxmox.com> References: <20250408121312.312526-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH manager v7 1/3] ui: qemu hd edit: allow importing a disk from the import storage X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> from the hardware view of a virtual machine, by adding a new 'Import Hard Disk' option in the 'Add' menu. It replaces the standard storage selector by a import storage selector, the file selector for the image to be imported, and a target storage selector. partially fixes #2424 Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- www/manager6/qemu/HDEdit.js | 68 +++++++++++++++++++++++++++---- www/manager6/qemu/HardwareView.js | 6 +++ 2 files changed, 66 insertions(+), 8 deletions(-) diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js index b78647ec..38bfb883 100644 --- a/www/manager6/qemu/HDEdit.js +++ b/www/manager6/qemu/HDEdit.js @@ -8,6 +8,8 @@ Ext.define('PVE.qemu.HDInputPanel', { unused: false, // ADD usused disk imaged + importDisk: false, // use import options + vmconfig: {}, // used to select usused disks viewModel: { @@ -78,11 +80,14 @@ Ext.define('PVE.qemu.HDInputPanel', { if (values.hdimage) { me.drive.file = values.hdimage; } else { - me.drive.file = values.hdstorage + ":" + values.disksize; + let disksize = values['import-from'] ? 0 : values.disksize; + me.drive.file = `${values.hdstorage}:${disksize}`; + PVE.Utils.propertyStringSet(me.drive, values['import-from'], 'import-from'); } me.drive.format = values.diskformat; } + PVE.Utils.propertyStringSet(me.drive, !values.backup, 'backup', '0'); PVE.Utils.propertyStringSet(me.drive, values.noreplicate, 'replicate', 'no'); PVE.Utils.propertyStringSet(me.drive, values.discard, 'discard', 'on'); @@ -168,6 +173,11 @@ Ext.define('PVE.qemu.HDInputPanel', { var me = this; me.down('#hdstorage').setNodename(nodename); me.down('#hdimage').setStorage(undefined, nodename); + + me.lookup('new-disk')?.setNodename(nodename); + me.lookup('import-source')?.setNodename(nodename); + me.lookup('import-source-file')?.setNodename(nodename); + me.lookup('import-target')?.setNodename(nodename); }, hasAdvanced: true, @@ -220,13 +230,52 @@ Ext.define('PVE.qemu.HDInputPanel', { }); column1.push(me.unusedDisks); } else if (me.isCreate) { - column1.push({ - xtype: 'pveDiskStorageSelector', - storageContent: 'images', - name: 'disk', - nodename: me.nodename, - autoSelect: me.insideWizard, - }); + if (!me.importDisk) { + column1.push({ + reference: 'new-disk', + xtype: 'pveDiskStorageSelector', + storageContent: 'images', + name: 'disk', + nodename: me.nodename, + autoSelect: me.insideWizard, + }); + } else { + column1.push({ + xtype: 'pveStorageSelector', + reference: 'import-source', + fieldLabel: gettext('Import Storage'), + name: 'import-source-storage', + storageContent: 'import', + nodename: me.nodename, + autoSelect: me.insideWizard, + disabled: false, + listeners: { + change: function(_selector, storage) { + me.lookup('import-source-file').setStorage(storage); + me.lookup('import-source-file').setDisabled(!storage); + }, + }, + }); + column1.push({ + xtype: 'pveFileSelector', + reference: 'import-source-file', + fieldLabel: gettext("Select Image"), + storageContent: 'import', + name: 'import-from', + filter: (rec) => ['qcow2', 'vmdk', 'raw'].indexOf(rec?.data?.format) !== -1, + nodename: me.nodename, + }); + column1.push({ + xtype: 'pveDiskStorageSelector', + reference: 'import-target', + storageLabel: gettext('Target Storage'), + hideSize: true, + storageContent: 'images', + name: 'disk', + nodename: me.nodename, + autoSelect: me.insideWizard, + }); + } } else { column1.push({ xtype: 'textfield', @@ -450,6 +499,8 @@ Ext.define('PVE.qemu.HDEdit', { width: 600, bodyPadding: 0, + importDisk: false, + initComponent: function() { var me = this; @@ -467,6 +518,7 @@ Ext.define('PVE.qemu.HDEdit', { nodename: nodename, unused: unused, isCreate: me.isCreate, + importDisk: me.importDisk, }); if (unused) { diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 4ce9908c..bf4319f4 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -697,6 +697,12 @@ Ext.define('PVE.qemu.HardwareView', { disabled: !caps.vms['VM.Config.Disk'], handler: editorFactory('HDEdit'), }, + { + text: gettext('Import Hard Disk'), + iconCls: 'fa fa-fw fa-cloud-download', + disabled: !caps.vms['VM.Config.Disk'], + handler: editorFactory('HDEdit', { importDisk: true }), + }, { text: gettext('CD/DVD Drive'), iconCls: 'pve-itype-icon-cdrom', -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel