From 8b4b51b05434d2cc9c8a5ca755fe351880d66f3d Mon Sep 17 00:00:00 2001 From: Sateesh Chodapuneedi Date: Mon, 18 Aug 2014 07:18:13 +0530 Subject: [PATCH] CLOUDSTACK-7360 [vmware] Add host to existing cluster fails if the cluster is using Nexus 1000v as backend for atleast one traffic type. While adding host to existing cluster which is using Nexus 1000v as a network backend, skip validation of Nexus VSM as it was already done while adding that cluster. Signed-off-by: Sateesh Chodapuneedi (cherry picked from commit a1d0925f902041b187f14413e91bc368f0708753) Signed-off-by: Rohit Yadav --- .../vmware/VmwareServerDiscoverer.java | 22 +++++++++++-------- .../vmware/manager/VmwareManager.java | 2 ++ .../vmware/manager/VmwareManagerImpl.java | 15 +++++++++++++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index e0c19319a2a..b01e1d8309d 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -294,15 +294,19 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer if (guestTrafficLabel != null) { s_logger.info("Detected guest network label : " + guestTrafficLabel); } - vsmIp = _urlParams.get("vsmipaddress"); - String vsmUser = _urlParams.get("vsmusername"); - String vsmPassword = _urlParams.get("vsmpassword"); - String clusterName = cluster.getName(); - try { - vsmInfo = _nexusElement.validateAndAddVsm(vsmIp, vsmUser, vsmPassword, clusterId, clusterName); - } catch (ResourceInUseException ex) { - DiscoveryException discEx = new DiscoveryException(ex.getLocalizedMessage() + ". The resource is " + ex.getResourceName()); - throw discEx; + // Before proceeding with validation of Nexus 1000v VSM check if an instance of Nexus 1000v VSM is already associated with this cluster. + boolean clusterHasVsm = _vmwareMgr.hasNexusVSM(clusterId); + if (!clusterHasVsm) { + vsmIp = _urlParams.get("vsmipaddress"); + String vsmUser = _urlParams.get("vsmusername"); + String vsmPassword = _urlParams.get("vsmpassword"); + String clusterName = cluster.getName(); + try { + vsmInfo = _nexusElement.validateAndAddVsm(vsmIp, vsmUser, vsmPassword, clusterId, clusterName); + } catch (ResourceInUseException ex) { + DiscoveryException discEx = new DiscoveryException(ex.getLocalizedMessage() + ". The resource is " + ex.getResourceName()); + throw discEx; + } } vsmCredentials = _vmwareMgr.getNexusVSMCredentialsByClusterId(clusterId); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java index 27975eea8ea..35e275e004e 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java @@ -77,4 +77,6 @@ public interface VmwareManager { public int getVcenterSessionTimeout(); boolean isLegacyZone(long dcId); + + boolean hasNexusVSM(Long clusterId); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 36d23229b70..4174b588eb2 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -1218,4 +1218,19 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw // Returning list of VmwareDatacenterVO objects, in-line with future requirements, if any, like participation of multiple VMware DCs in a zone. return vmwareDcList; } + + @Override + public boolean hasNexusVSM(Long clusterId) { + ClusterVSMMapVO vsmMapVo = null; + + vsmMapVo = _vsmMapDao.findByClusterId(clusterId); + if (vsmMapVo == null) { + s_logger.info("There is no instance of Nexus 1000v VSM associated with this cluster [Id:" + clusterId + "] yet."); + return false; + } + else { + s_logger.info("An instance of Nexus 1000v VSM [Id:" + vsmMapVo.getVsmId() + "] associated with this cluster [Id:" + clusterId + "]"); + return true; + } + } }