mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-03 05:16:26 +00:00
ui: refactor sortByPreviousUsage and nextFreeDisk
we'll use them outside of the controllerSelector soon Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
3d0b402b03
commit
2aa645dad7
@ -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,
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user