From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager v2 03/12] ui: refactor sortByPreviousUsage and nextFreeDisk
Date: Wed, 22 Sep 2021 11:27:40 +0200 [thread overview]
Message-ID: <20210922092749.2386238-4-d.csapak@proxmox.com> (raw)
In-Reply-To: <20210922092749.2386238-1-d.csapak@proxmox.com>
we'll use them outside of the controllerSelector soon
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/manager6/Utils.js | 46 +++++++++++++++++++++++++
www/manager6/form/ControllerSelector.js | 45 +++++-------------------
2 files changed, 54 insertions(+), 37 deletions(-)
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 4041c010..8631a67c 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1757,6 +1757,52 @@ Ext.define('PVE.Utils', {
return true;
},
+
+ sortByPreviousUsage: function(vmconfig, controllerList) {
+ if (!controllerList) {
+ controllerList = ['ide', 'virtio', 'scsi', 'sata'];
+ }
+ let usedControllers = {};
+ for (const type of Object.keys(PVE.Utils.diskControllerMaxIDs)) {
+ usedControllers[type] = 0;
+ }
+
+ for (const property of Object.keys(vmconfig)) {
+ if (property.match(PVE.Utils.bus_match) && !vmconfig[property].match(/media=cdrom/)) {
+ const foundController = property.match(PVE.Utils.bus_match)[1];
+ usedControllers[foundController]++;
+ }
+ }
+
+ let sortPriority = PVE.qemu.OSDefaults.getDefaults(vmconfig.ostype).busPriority;
+
+ let sortedList = Ext.clone(controllerList);
+ sortedList.sort(function(a, b) {
+ if (usedControllers[b] === usedControllers[a]) {
+ return sortPriority[b] - sortPriority[a];
+ }
+ return usedControllers[b] - usedControllers[a];
+ });
+
+ return sortedList;
+ },
+
+ nextFreeDisk: function(controllers, config) {
+ for (const controller of controllers) {
+ for (let i = 0; i < PVE.Utils.diskControllerMaxIDs[controller]; i++) {
+ let confid = controller + i.toString();
+ if (!Ext.isDefined(config[confid])) {
+ return {
+ controller,
+ id: i,
+ confid,
+ };
+ }
+ }
+ }
+
+ return undefined;
+ },
},
singleton: true,
diff --git a/www/manager6/form/ControllerSelector.js b/www/manager6/form/ControllerSelector.js
index 27c06169..fcf625a1 100644
--- a/www/manager6/form/ControllerSelector.js
+++ b/www/manager6/form/ControllerSelector.js
@@ -6,44 +6,15 @@ Ext.define('PVE.form.ControllerSelector', {
vmconfig: {}, // used to check for existing devices
- sortByPreviousUsage: function(vmconfig, controllerList) {
- let usedControllers = {};
- for (const type of Object.keys(PVE.Utils.diskControllerMaxIDs)) {
- usedControllers[type] = 0;
- }
-
- for (const property of Object.keys(vmconfig)) {
- if (property.match(PVE.Utils.bus_match) && !vmconfig[property].match(/media=cdrom/)) {
- const foundController = property.match(PVE.Utils.bus_match)[1];
- usedControllers[foundController]++;
- }
- }
-
- let sortPriority = PVE.qemu.OSDefaults.getDefaults(vmconfig.ostype).busPriority;
-
- let sortedList = Ext.clone(controllerList);
- sortedList.sort(function(a, b) {
- if (usedControllers[b] === usedControllers[a]) {
- return sortPriority[b] - sortPriority[a];
- }
- return usedControllers[b] - usedControllers[a];
- });
-
- return sortedList;
- },
-
setToFree: function(controllers, busField, deviceIDField) {
let me = this;
- for (const controller of controllers) {
- busField.setValue(controller);
- for (let i = 0; i < PVE.Utils.diskControllerMaxIDs[controller]; i++) {
- let confid = controller + i.toString();
- if (!Ext.isDefined(me.vmconfig[confid])) {
- deviceIDField.setValue(i);
- return;
- }
- }
+ let freeId = PVE.Utils.nextFreeDisk(controllers, me.vmconfig);
+
+ if (freeId !== undefined) {
+ busField.setValue(freeId.controller);
+ deviceIDField.setValue(freeId.id);
}
+
},
setVMConfig: function(vmconfig, autoSelect) {
@@ -54,7 +25,7 @@ Ext.define('PVE.form.ControllerSelector', {
let bussel = me.down('field[name=controller]');
let deviceid = me.down('field[name=deviceid]');
- let clist = ['ide', 'virtio', 'scsi', 'sata'];
+ let clist;
if (autoSelect === 'cdrom') {
if (!Ext.isDefined(me.vmconfig.ide2)) {
bussel.setValue('ide');
@@ -64,7 +35,7 @@ Ext.define('PVE.form.ControllerSelector', {
clist = ['ide', 'scsi', 'sata'];
} else {
// in most cases we want to add a disk to the same controller we previously used
- clist = me.sortByPreviousUsage(me.vmconfig, clist);
+ clist = PVE.Utils.sortByPreviousUsage(me.vmconfig);
}
me.setToFree(clist, bussel, deviceid);
--
2.30.2
next prev parent reply other threads:[~2021-09-22 9:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-22 9:27 [pve-devel] [PATCH manager v2 00/12] multi tab disk panel & multi disk wizard Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 01/12] ui: qemu/HDEdit: move Bandwidth options to a different tab Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 02/12] ui: form/ControllerSelector: set correct max value for the device-id Dominik Csapak
2021-09-22 9:27 ` Dominik Csapak [this message]
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 04/12] ui: form/ControllerSelector: add updateVMConfig and getConfId Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 05/12] ui: qemu/HDEdit: use me instead of this Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 06/12] ui: qemu/HDEdit: fire an event when the disk id changes Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 07/12] ui: qemu/OSTypeEdit: drop throwing an error on multiple widgets Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 08/12] ui: Utils: add capture group for the id in bus_match Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 09/12] ui: form/ControllerSelector: add option for selecting free on inital config Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 10/12] ui: qemu/OSTypeEdit: set ostype in viewmodel Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 11/12] ui: add qemu/MultiHDEdit and use it in the wizard Dominik Csapak
2021-09-22 9:27 ` [pve-devel] [PATCH manager v2 12/12] ui: window/Wizard: make it a little wider Dominik Csapak
2021-10-04 7:36 ` [pve-devel] partially-applied: [PATCH manager v2 00/12] multi tab disk panel & multi disk wizard Thomas Lamprecht
2021-10-19 13:04 ` Aaron Lauterer
2021-10-20 14:23 ` Thomas Lamprecht
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=20210922092749.2386238-4-d.csapak@proxmox.com \
--to=d.csapak@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