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 65DCD1FF16F for <inbox@lore.proxmox.com>; Thu, 13 Mar 2025 12:18:41 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9FA2C16927; Thu, 13 Mar 2025 12:18:30 +0100 (CET) From: Dominik Csapak <d.csapak@proxmox.com> To: pve-devel@lists.proxmox.com Date: Thu, 13 Mar 2025 12:17:56 +0100 Message-Id: <20250313111756.1560235-5-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250313111756.1560235-1-d.csapak@proxmox.com> References: <20250313111756.1560235-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.022 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 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 3/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> adds a checkbox 'import image' above the storage selector which: * hides the original storage selector * shows a 'source storage' selector * shows a 'import file' selector * shows a 'target storage' selector Since the wizard and the hd edit share this panel, this also works in the wizard. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- www/manager6/qemu/HDEdit.js | 72 ++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js index b78647ec..a235815d 100644 --- a/www/manager6/qemu/HDEdit.js +++ b/www/manager6/qemu/HDEdit.js @@ -78,11 +78,17 @@ Ext.define('PVE.qemu.HDInputPanel', { if (values.hdimage) { me.drive.file = values.hdimage; } else { - me.drive.file = values.hdstorage + ":" + values.disksize; + let disksize = values.disksize; + if (values['import-from']) { + PVE.Utils.propertyStringSet(me.drive, values['import-from'], 'import-from'); + disksize = 0; + } + me.drive.file = `${values.hdstorage}:${disksize}`; } 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 +174,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, @@ -221,12 +232,71 @@ Ext.define('PVE.qemu.HDInputPanel', { column1.push(me.unusedDisks); } else if (me.isCreate) { column1.push({ + xtype: 'proxmoxcheckbox', + isFormField: false, + fieldLabel: gettext("Import Image"), + listeners: { + change: function(_cb, value) { + me.lookup('new-disk').setVisible(!value); + me.lookup('new-disk').setDisabled(!!value); + + me.lookup('import-source').setVisible(!!value); + me.lookup('import-source').setDisabled(!value); + me.lookup('import-source-file').setVisible(!!value); + + me.lookup('import-target').setVisible(!!value); + me.lookup('import-target').setDisabled(!value); + }, + }, + }); + column1.push({ + reference: 'new-disk', xtype: 'pveDiskStorageSelector', storageContent: 'images', name: 'disk', nodename: me.nodename, autoSelect: me.insideWizard, }); + column1.push({ + xtype: 'pveStorageSelector', + reference: 'import-source', + fieldLabel: gettext('Import Storage'), + name: 'import-source-storage', + hidden: true, + disabled: true, + storageContent: 'import', + nodename: me.nodename, + autoSelect: me.insideWizard, + listeners: { + change: function(_selector, storage) { + me.lookup('import-source-file').setDisabled(!storage); + me.lookup('import-source-file').setStorage(storage); + }, + }, + }); + column1.push({ + xtype: 'pveFileSelector', + reference: 'import-source-file', + fieldLabel: gettext("Select Image"), + hidden: true, + disabled: true, + storageContent: 'import', + name: 'import-from', + filter: (rec) => rec?.data?.format === 'qcow2', + nodename: me.nodename, + }); + column1.push({ + xtype: 'pveDiskStorageSelector', + reference: 'import-target', + storageLabel: gettext('Target Storage'), + hidden: true, + disabled: true, + hideSize: true, + storageContent: 'images', + name: 'target', + nodename: me.nodename, + autoSelect: me.insideWizard, + }); } else { column1.push({ xtype: 'textfield', -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel