[pve-devel] [PATCH manager 03/10] ui: refactor sortByPreviousUsage and nextFreeDisk
Dominik Csapak
d.csapak at proxmox.com
Mon Sep 20 14:23:31 CEST 2021
we'll use them outside of the controllerSelector soon
Signed-off-by: Dominik Csapak <d.csapak at 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
More information about the pve-devel
mailing list