From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v10 manager 19/19] ui: qemu: wizard: add import from OVF functionality
Date: Wed, 6 Apr 2022 10:04:16 +0200 [thread overview]
Message-ID: <20220406080416.66227-20-f.ebner@proxmox.com> (raw)
In-Reply-To: <20220406080416.66227-1-f.ebner@proxmox.com>
From: Dominic Jäger <d.jaeger@proxmox.com>
Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
[FE: Split out preparatory work, and re-use existing classes
Show message upon successfull readovf API call
Simplify a few things]
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
www/manager6/qemu/CreateWizard.js | 61 +++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/www/manager6/qemu/CreateWizard.js b/www/manager6/qemu/CreateWizard.js
index a785a882..d522c09b 100644
--- a/www/manager6/qemu/CreateWizard.js
+++ b/www/manager6/qemu/CreateWizard.js
@@ -22,6 +22,7 @@ Ext.define('PVE.qemu.CreateWizard', {
{
xtype: 'inputpanel',
title: gettext('General'),
+ itemId: 'generalPanel',
onlineHelp: 'qm_general_settings',
column1: [
{
@@ -63,6 +64,63 @@ Ext.define('PVE.qemu.CreateWizard', {
value: '',
allowBlank: true,
},
+ {
+ xtype: 'textfield',
+ name: 'ovfTextfield',
+ emptyText: '/path/to/manifest.ovf',
+ fieldLabel: gettext('Import from OVF'),
+ hidden: Proxmox.UserName !== 'root@pam',
+ },
+ {
+ xtype: 'proxmoxButton',
+ text: gettext('Load .ovf'),
+ hidden: Proxmox.UserName !== 'root@pam',
+ handler: function() {
+ const inputpanel = this.up('#generalPanel');
+ const nodename = inputpanel.down('pveNodeSelector').getValue();
+ const ovfTextfieldValue = inputpanel.down('textfield[name=ovfTextfield]').getValue();
+ const wizard = this.up('window');
+
+ Proxmox.Utils.API2Request({
+ url: `/nodes/${nodename}/readovf`,
+ method: 'GET',
+ params: {
+ manifest: ovfTextfieldValue,
+ },
+ success: function(response) {
+ const ovfData = response.result.data;
+
+ wizard.down('textfield[name=name]').setValue(ovfData.name);
+ wizard.down('#cpuPanel').getViewModel().set('coreCount', ovfData.cores);
+ wizard.down('#memoryPanel').setMemory(ovfData.memory);
+
+ delete ovfData.cores;
+ delete ovfData.name;
+ delete ovfData.memory;
+
+ let multiDiskPanel = wizard.down('pveMultiHDPanel');
+ multiDiskPanel.removeAllDisks();
+ Object.keys(ovfData).sort().forEach(function(drive) {
+ multiDiskPanel.addDisk(drive, { 'importPath': ovfData[drive] });
+ });
+
+ wizard.down('radiofield[inputValue=none]').setValue(true);
+ // Need to manually uncheck when not yet rendered.
+ wizard.down('radiofield[inputValue=iso]').setValue(false);
+
+ Ext.Msg.show({
+ title: gettext('Success'),
+ icon: Ext.Msg.INFO,
+ msg: gettext('VM settings updated'),
+ buttons: Ext.Msg.OK,
+ });
+ },
+ failure: function(response) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ },
+ });
+ },
+ },
],
advancedColumn1: [
{
@@ -120,6 +178,7 @@ Ext.define('PVE.qemu.CreateWizard', {
delete values.order;
delete values.up;
delete values.down;
+ delete values.ovfTextfield;
return values;
},
@@ -162,11 +221,13 @@ Ext.define('PVE.qemu.CreateWizard', {
},
{
xtype: 'pveQemuProcessorPanel',
+ itemId: 'cpuPanel',
insideWizard: true,
title: gettext('CPU'),
},
{
xtype: 'pveQemuMemoryPanel',
+ itemId: 'memoryPanel',
insideWizard: true,
title: gettext('Memory'),
},
--
2.30.2
prev parent reply other threads:[~2022-04-06 8:05 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-06 8:03 [pve-devel] [PATCH-SERIES v10 manager] Add GUI to import disk & VM Fabian Ebner
2022-04-06 8:03 ` [pve-devel] [PATCH v10 manager 01/19] api: nodes: add readovf endpoint Fabian Ebner
2022-04-06 8:03 ` [pve-devel] [PATCH v10 manager 02/19] ui: HD edit: get rid of unneeded binding for backup checkbox Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 03/19] ui: HD edit: move advanced options into a dedicated tab Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 04/19] ui: disk storage selector: add setSize function Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 05/19] ui: file selector: add getCurrentSize function Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 06/19] ui: HD edit: allow selecting import source Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 07/19] ui: CD edit: handle change even if not yet rendered Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 08/19] ui: multi disk edit: only pass confid for addPanel Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 09/19] ui: HD edit: allow preselecting config ID Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 10/19] ui: multi HD edit: pre select passed-in " Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 11/19] ui: multi disk edit: allow setting config ID when adding disk Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 12/19] ui: multi disk edit: add removeAllDisks function Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 13/19] ui: multi disk edit: allow adding a disk with existing settings Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 14/19] ui: multi disk edit: expose addDisk outside of the controller Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 15/19] ui: HD edit: set drive: make specifying file/volid optional Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 16/19] ui: HD edit: support setting an import path in setDrive Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 17/19] ui: qemu: memory edit: expose setMemory outside the controller Fabian Ebner
2022-04-06 8:04 ` [pve-devel] [PATCH v10 manager 18/19] ui: qemu: memory edit: allow passing explicit value Fabian Ebner
2022-04-06 8:04 ` Fabian Ebner [this message]
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=20220406080416.66227-20-f.ebner@proxmox.com \
--to=f.ebner@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox