mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-07 22:13:24 +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;
|
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,
|
singleton: true,
|
||||||
|
@ -6,44 +6,15 @@ Ext.define('PVE.form.ControllerSelector', {
|
|||||||
|
|
||||||
vmconfig: {}, // used to check for existing devices
|
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) {
|
setToFree: function(controllers, busField, deviceIDField) {
|
||||||
let me = this;
|
let me = this;
|
||||||
for (const controller of controllers) {
|
let freeId = PVE.Utils.nextFreeDisk(controllers, me.vmconfig);
|
||||||
busField.setValue(controller);
|
|
||||||
for (let i = 0; i < PVE.Utils.diskControllerMaxIDs[controller]; i++) {
|
if (freeId !== undefined) {
|
||||||
let confid = controller + i.toString();
|
busField.setValue(freeId.controller);
|
||||||
if (!Ext.isDefined(me.vmconfig[confid])) {
|
deviceIDField.setValue(freeId.id);
|
||||||
deviceIDField.setValue(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
setVMConfig: function(vmconfig, autoSelect) {
|
setVMConfig: function(vmconfig, autoSelect) {
|
||||||
@ -54,7 +25,7 @@ Ext.define('PVE.form.ControllerSelector', {
|
|||||||
let bussel = me.down('field[name=controller]');
|
let bussel = me.down('field[name=controller]');
|
||||||
let deviceid = me.down('field[name=deviceid]');
|
let deviceid = me.down('field[name=deviceid]');
|
||||||
|
|
||||||
let clist = ['ide', 'virtio', 'scsi', 'sata'];
|
let clist;
|
||||||
if (autoSelect === 'cdrom') {
|
if (autoSelect === 'cdrom') {
|
||||||
if (!Ext.isDefined(me.vmconfig.ide2)) {
|
if (!Ext.isDefined(me.vmconfig.ide2)) {
|
||||||
bussel.setValue('ide');
|
bussel.setValue('ide');
|
||||||
@ -64,7 +35,7 @@ Ext.define('PVE.form.ControllerSelector', {
|
|||||||
clist = ['ide', 'scsi', 'sata'];
|
clist = ['ide', 'scsi', 'sata'];
|
||||||
} else {
|
} else {
|
||||||
// in most cases we want to add a disk to the same controller we previously used
|
// 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);
|
me.setToFree(clist, bussel, deviceid);
|
||||||
|
Loading…
Reference in New Issue
Block a user