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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox