DaanHoogland commented on a change in pull request #2919: vmware: updateVmwareDc API for updating vmware datacenter details URL: https://github.com/apache/cloudstack/pull/2919#discussion_r228855574
########## File path: plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java ########## @@ -1132,6 +1149,70 @@ public VmwareDatacenterVO addVmwareDatacenter(AddVmwareDcCmd cmd) throws Resourc return vmwareDc; } + @Override + @ActionEvent(eventType = EventTypes.EVENT_ZONE_EDIT, eventDescription = "updating VMware datacenter") + public VmwareDatacenter updateVmwareDatacenter(UpdateVmwareDcCmd cmd) { + final Long zoneId = cmd.getZoneId(); + final String userName = cmd.getUsername(); + final String password = cmd.getPassword(); + final String vCenterHost = cmd.getVcenter(); + final String vmwareDcName = cmd.getName(); + final Boolean isRecursive = cmd.isRecursive(); + + final VmwareDatacenterZoneMap vdcMap = vmwareDatacenterZoneMapDao.findByZoneId(zoneId); + final VmwareDatacenterVO vmwareDc = vmwareDcDao.findById(vdcMap.getVmwareDcId()); + if (vmwareDc == null) { + throw new CloudRuntimeException("VMWare datacenter does not exist by provided ID"); + } + final String oldVCenterHost = vmwareDc.getVcenterHost(); + + if (!Strings.isNullOrEmpty(userName)) { + vmwareDc.setUser(userName); + } + if (!Strings.isNullOrEmpty(password)) { + vmwareDc.setPassword(password); + } + if (!Strings.isNullOrEmpty(vCenterHost)) { + vmwareDc.setVcenterHost(vCenterHost); + } + if (!Strings.isNullOrEmpty(vmwareDcName)) { + vmwareDc.setVmwareDatacenterName(vmwareDcName); + } + vmwareDc.setGuid(String.format("%s@%s", vmwareDc.getVmwareDatacenterName(), vmwareDc.getVcenterHost())); + + return Transaction.execute(new TransactionCallback<VmwareDatacenter>() { + @Override + public VmwareDatacenter doInTransaction(TransactionStatus status) { + if (vmwareDcDao.update(vmwareDc.getId(), vmwareDc)) { + if (isRecursive) { + for (final Cluster cluster : clusterDao.listByDcHyType(zoneId, Hypervisor.HypervisorType.VMware.toString())) { + final Map<String, String> clusterDetails = clusterDetailsDao.findDetails(cluster.getId()); + clusterDetails.put("username", vmwareDc.getUser()); + clusterDetails.put("password", vmwareDc.getPassword()); + final String clusterUrl = clusterDetails.get("url"); + if (!Strings.isNullOrEmpty(clusterUrl)) { + clusterDetails.put("url", clusterUrl.replace(oldVCenterHost, vmwareDc.getVcenterHost())); Review comment: TODO: not hardcode the url but dynamically create it ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services