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 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel