CLOUDSTACK-4787: Allow users to select disk controller for VM/template - Adds new controller types in the UI, for selecting root disk controller while registering templates - Fixes bug to not override disk controller type if provided in the details (either vm details or from template details)
Signed-off-by: Rohit Yadav <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c7d67628 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c7d67628 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c7d67628 Branch: refs/heads/4.5 Commit: c7d67628b3ff86802a1ac3b58e0bc05d54afd543 Parents: 4a48427 Author: Rohit Yadav <[email protected]> Authored: Fri Nov 27 18:30:00 2015 +0530 Committer: Rohit Yadav <[email protected]> Committed: Fri Nov 27 18:30:00 2015 +0530 ---------------------------------------------------------------------- server/src/com/cloud/configuration/Config.java | 2 +- server/src/com/cloud/vm/UserVmManagerImpl.java | 15 ++++++++++----- ui/scripts/templates.js | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c7d67628/server/src/com/cloud/configuration/Config.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index 41a1872..3a24698 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -1195,7 +1195,7 @@ public enum Config { String.class, "vmware.root.disk.controller", "ide", - "Specify the default disk controller for root volumes, valid values are scsi, ide", + "Specify the default disk controller for root volumes, valid values are scsi, ide, osdefault. Please check documentation for more details on each of these values.", null), VmwareSystemVmNicDeviceType( "Advanced", http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c7d67628/server/src/com/cloud/vm/UserVmManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 6f49bb2..35aafb8 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -3117,11 +3117,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi"); } else { String controllerSetting = _configDao.getValue("vmware.root.disk.controller"); - vm.setDetail(VmDetailConstants.ROOK_DISK_CONTROLLER, controllerSetting); - if (controllerSetting.equalsIgnoreCase("scsi")) { - vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi"); - } else { - vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault"); + // Don't override if VM already has root/data disk controller detail + if (vm.getDetail(VmDetailConstants.ROOK_DISK_CONTROLLER) == null) { + vm.setDetail(VmDetailConstants.ROOK_DISK_CONTROLLER, controllerSetting); + } + if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) { + if (controllerSetting.equalsIgnoreCase("scsi")) { + vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi"); + } else { + vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault"); + } } } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c7d67628/ui/scripts/templates.js ---------------------------------------------------------------------- diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js index 6d09b51..bff971c 100644 --- a/ui/scripts/templates.js +++ b/ui/scripts/templates.js @@ -281,6 +281,26 @@ id: "ide", description: "ide" }); + items.push({ + id: "osdefault", + description: "osdefault" + }); + items.push({ + id: "pvscsi", + description: "pvscsi" + }); + items.push({ + id: "lsilogic", + description: "lsilogic" + }); + items.push({ + id: "lsisas1068", + description: "lsilogicsas" + }); + items.push({ + id: "buslogic", + description: "buslogic" + }); args.response.success({ data: items });
