[pve-devel] [RFC manager] When adding a new hard disk, use the most used controller as suggested value
Emmanuel Kasper
e.kasper at proxmox.com
Wed Sep 21 17:44:27 CEST 2016
This is a complementary fix for #1105 (Create Linux VM Wizard: use scsi
as default bus/device) and add some logic to the list of controllers
presented in the ControllerSelector combo box
Since we can have IDE, SCSI, Virtio(blk) as a controller during installation,
based on OS detection and personal preferences, we can reasonably assume
on 80 % of cases it will be the same controller we want to use for the
next time we add a hardisk.
This allows backward compatibility for Linux guests which were proposed a
virtio-blk as first choice, and also helps newly created Linux VMs by proposing
SCSI.
---
www/manager6/form/ControllerSelector.js | 54 +++++++++++++++++++++++++++++++--
1 file changed, 52 insertions(+), 2 deletions(-)
diff --git a/www/manager6/form/ControllerSelector.js b/www/manager6/form/ControllerSelector.js
index 1b2946a..6dec05a 100644
--- a/www/manager6/form/ControllerSelector.js
+++ b/www/manager6/form/ControllerSelector.js
@@ -17,6 +17,54 @@ Ext.define('PVE.form.ControllerSelector', {
vmconfig: {}, // used to check for existing devices
+ sortByPreviousUsage: function(vmconfig, controllerList) {
+ var sortedList = [];
+
+ var usedControllers = Ext.clone(PVE.form.ControllerSelector.maxIds);
+
+ var type;
+ for (type in usedControllers) {
+ if(usedControllers.hasOwnProperty(type)) {
+ usedControllers[type] = 0;
+ }
+ }
+
+ var property;
+ for (property in vmconfig) {
+ if (vmconfig.hasOwnProperty(property)) {
+ if (property.match(/^ide\d+/) && !vmconfig[property].match(/media=cdrom/)) {
+ usedControllers.ide++;
+ } else if (property.match(/^sata\d+/)) {
+ usedControllers.sata++;
+ } else if (property.match(/^virtio\d+/)) {
+ usedControllers.virtio++;
+ } else if (property.match(/^scsi\d+/)) {
+ usedControllers.scsi++;
+ }
+ }
+ }
+
+ var arrayControllers = [
+ {name:'ide', value:usedControllers.ide},
+ {name:'sata', value:usedControllers.sata},
+ {name:'virtio', value:usedControllers.virtio},
+ {name:'scsi', value:usedControllers.scsi}
+ ].sort(function compare(a, b){
+ return b.value - a.value;
+ });
+
+ if (arrayControllers[0].value > arrayControllers[1].value ) {
+ // we have a favourite !
+ var favourite = arrayControllers[0].name;
+ sortedList = Ext.Array.remove(controllerList, favourite);
+ sortedList.unshift(favourite);
+ return sortedList;
+ }
+ else {
+ return controllerList;
+ }
+ },
+
setVMConfig: function(vmconfig, autoSelect) {
var me = this;
@@ -30,8 +78,10 @@ Ext.define('PVE.form.ControllerSelector', {
me.down('field[name=deviceid]').setValue(2);
return;
}
- } else if (me.vmconfig.ostype === 'l26') {
- clist = ['virtio', '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);
}
Ext.Array.each(clist, function(controller) {
--
2.1.4
More information about the pve-devel
mailing list