You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2012/05/28 00:30:44 UTC

[36/50] git commit: CS-9919 Support for Nexus Swiches (Cisco Vswitches)

CS-9919 Support for Nexus Swiches (Cisco Vswitches)

Added VSM credentials to AddClusterCmd(optonal params only).
Cleanup.

Conflicts:

	api/src/com/cloud/api/commands/AddClusterCmd.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c65199cd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c65199cd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c65199cd

Branch: refs/heads/master
Commit: c65199cd8cd7c68c0c8da163b1656292fabd3301
Parents: 9709774
Author: Sateesh Chodapuneedi <sa...@citrix.com>
Authored: Tue May 15 21:53:36 2012 +0530
Committer: Vijayendra Bhamidipati <vi...@citrix.com>
Committed: Fri May 25 17:56:46 2012 -0700

----------------------------------------------------------------------
 api/src/com/cloud/api/ApiConstants.java            |    3 +
 api/src/com/cloud/api/commands/AddClusterCmd.java  |  209 ++++++++-------
 .../hypervisor/vmware/resource/VmwareResource.java |   19 +-
 .../cloud/hypervisor/vmware/VmwareManagerImpl.java |   48 ++--
 .../com/cloud/resource/ResourceManagerImpl.java    |   54 ++++-
 .../hypervisor/vmware/mo/HypervisorHostHelper.java |    2 +-
 6 files changed, 212 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/api/src/com/cloud/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java
index 0dc1b36..300c5c1 100755
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@ -343,6 +343,9 @@ public class ApiConstants {
     public static final String VCENTER_IP_ADDRESS = "vcenteripaddr";
     public static final String VCENTER_DC_NAME = "vcenterdcname";
     public static final String CISCO_NEXUS_VSM_NAME = "vsmname";
+    public static final String VSM_USERNAME = "vsmusername";
+    public static final String VSM_PASSWORD = "vsmpassword";
+    public static final String VSM_IPADDRESS = "vsmipaddress";
     
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/api/src/com/cloud/api/commands/AddClusterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/AddClusterCmd.java b/api/src/com/cloud/api/commands/AddClusterCmd.java
index c718b19..28b38ab 100755
--- a/api/src/com/cloud/api/commands/AddClusterCmd.java
+++ b/api/src/com/cloud/api/commands/AddClusterCmd.java
@@ -10,7 +10,8 @@
 // limitations under the License.
 // 
 // Automatically generated by addcopyright.py at 04/03/2012
-package com.cloud.api.commands;
+
+package com.cloud.api.commands;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -28,18 +29,18 @@ import com.cloud.api.response.ListResponse;
 import com.cloud.exception.DiscoveryException;
 import com.cloud.org.Cluster;
 import com.cloud.user.Account;
-
-@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class)
-public class AddClusterCmd extends BaseCmd {
-    public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName());
-
-    private static final String s_name = "addclusterresponse";
-    
-    @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, required=true, description="the cluster name")
-    private String clusterName;
-
-    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host")
-    private String password;
+
+@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class)
+public class AddClusterCmd extends BaseCmd {
+    public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName());
+
+    private static final String s_name = "addclusterresponse";
+    
+    @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, required=true, description="the cluster name")
+    private String clusterName;
+
+    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host")
+    private String password;
 
     @IdentityMapper(entityTableName="host_pod_ref")
     @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host")
@@ -52,94 +53,116 @@ public class AddClusterCmd extends BaseCmd {
     private String username;
 
     @IdentityMapper(entityTableName="data_center")
-    @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster")
-    private Long zoneId;
-    
-    @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator")
-    private String hypervisor;
-    
-    @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, required=true, description="type of the cluster: CloudManaged, ExternalManaged")
-    private String clusterType;
-    
-    @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources")
+
+    @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster")
+    private Long zoneId;
+    
+    @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator")
+    private String hypervisor;
+    
+    @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, required=true, description="type of the cluster: CloudManaged, ExternalManaged")
+    private String clusterType;
+    
+    @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources")
     private String allocationState;
     
-    public String getClusterName() {
-        return clusterName;
-    }
+    @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster")
+    private String vsmusername;
 
-    public String getPassword() {
-        return password;
-    }
+    @Parameter(name = ApiConstants.VSM_PASSWORD, type = CommandType.STRING, required = false, description = "the password for the VSM associated with this cluster")
+    private String vsmpassword;
 
-    public Long getPodId() {
-        return podId;
-    }
-
-    public String getUrl() {
-        return url;
-    }
+    @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster")
+    private String vsmipaddress;
 
-    public String getUsername() {
-        return username;
+    public String getVSMIpaddress() {
+        return vsmipaddress;
     }
 
-    public Long getZoneId() {
-        return zoneId;
+    public String getVSMPassword() {
+        return vsmpassword;
     }
-    
-    public String getHypervisor() {
-    	return hypervisor;
-    }
-    
-    @Override
-    public String getCommandName() {
-    	return s_name;
-    }
-    
-    public String getClusterType() {
-    	return clusterType;
-    }
-    
-    public void setClusterType(String type) {
-    	this.clusterType = type;
-    }
-    
-    @Override
-    public long getEntityOwnerId() {
-        return Account.ACCOUNT_ID_SYSTEM;
-    }
-    
-    public String getAllocationState() {
-    	return allocationState;
-    }
-    
-    public void setAllocationState(String allocationState) {
-    	this.allocationState = allocationState;
-    }    
-
-    @Override
-    public void execute(){
-        try {
-            List<? extends Cluster> result = _resourceService.discoverCluster(this);
-            ListResponse<ClusterResponse> response = new ListResponse<ClusterResponse>();
-            List<ClusterResponse> clusterResponses = new ArrayList<ClusterResponse>();
-            if (result != null) {
-                for (Cluster cluster : result) {
-                    ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false);
-                    clusterResponses.add(clusterResponse);
-                }
-            } else {
-                throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster");
-            }
 
-            response.setResponses(clusterResponses);
-            response.setResponseName(getCommandName());
-            
-            this.setResponseObject(response);
-        } catch (DiscoveryException ex) {
-            s_logger.warn("Exception: ", ex);
-            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage());
-        }
+    public String getVSMUsername() {
+        return vsmusername;
     }
+
+    public String getClusterName() {
+        return clusterName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public Long getPodId() {
+        return podId;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public Long getZoneId() {
+        return zoneId;
+    }
+    
+    public String getHypervisor() {
+    	return hypervisor;
+    }
+    
+    @Override
+    public String getCommandName() {
+    	return s_name;
+    }
+    
+    public String getClusterType() {
+    	return clusterType;
+    }
+    
+    public void setClusterType(String type) {
+    	this.clusterType = type;
+    }
+    
+    @Override
+    public long getEntityOwnerId() {
+        return Account.ACCOUNT_ID_SYSTEM;
+    }
+    
+    public String getAllocationState() {
+    	return allocationState;
+    }
+    
+    public void setAllocationState(String allocationState) {
+    	this.allocationState = allocationState;
+    }    
+
+    @Override
+    public void execute(){
+        try {
+            List<? extends Cluster> result = _resourceService.discoverCluster(this);
+            ListResponse<ClusterResponse> response = new ListResponse<ClusterResponse>();
+            List<ClusterResponse> clusterResponses = new ArrayList<ClusterResponse>();
+            if (result != null) {
+                for (Cluster cluster : result) {
+                    ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false);
+                    clusterResponses.add(clusterResponse);
+                }
+            } else {
+                throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster");
+            }
+
+            response.setResponses(clusterResponses);
+            response.setResponseName(getCommandName());
+            
+            this.setResponseObject(response);
+        } catch (DiscoveryException ex) {
+            s_logger.warn("Exception: ", ex);
+            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 07bbeb0..5a4d1ac 100755
--- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -1474,7 +1474,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
                 }
             }
 
-            String switchUuid;
+            String dvSwitchUuid;
             ManagedObjectReference dcMor = hyperHost.getHyperHostDatacenter();
             DatacenterMO dataCenterMo = new DatacenterMO(context, dcMor);
 
@@ -1487,10 +1487,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
                 Pair<ManagedObjectReference, String> networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo);
 
                 ManagedObjectReference dvsMor = dataCenterMo.getDvSwitchMor(networkInfo.first());
-                switchUuid = dataCenterMo.getDvSwitchUuid(dvsMor);
-                s_logger.info("Preparing NIC device on dvSwitch : " + switchUuid);
+                dvSwitchUuid = dataCenterMo.getDvSwitchUuid(dvsMor);
+                s_logger.info("Preparing NIC device on dvSwitch : " + dvSwitchUuid);
 
-                nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), nicDeviceType, networkInfo.second(), nicTo.getMac(), i, i + 1, true, true);
+                nic = VmwareHelper.prepareDvNicDevice(vmMo, networkInfo.first(), nicDeviceType, networkInfo.second(), dvSwitchUuid, nicTo.getMac(), i, i + 1, true, true);
                 deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec();
                 deviceConfigSpecArray[i].setDevice(nic);
                 deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add);
@@ -4034,7 +4034,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
             _hostName = hostMo.getHyperHostName();
             _privateNetworkVSwitchName = mgr.getPrivateVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware);
             _publicNetworkVSwitchName = mgr.getPublicVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware);
-            _guestNetworkVSwitchName = mgr.getGuestVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware);
+            _guestNetworkVSwitchName = mgr.getGuestVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware);
+            Map<String, String> vsmCredentials;
+            if (mgr.getNexusVSwitchGlobalParameter()) {
+                vsmCredentials = mgr.getNexusVSMCredentials(_guid);
+                if (vsmCredentials != null) {
+                    s_logger.info("Stocking credentials while configuring resource.");
+                    context.registerStockObject("vsmcredentials", vsmCredentials);
+                }
+            }
+
         } catch (Exception e) {
             s_logger.error("Unexpected Exception ", e);
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java b/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java
index 24113bc..ac90fb8 100755
--- a/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java
+++ b/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java
@@ -745,7 +745,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
             mountPoint = mount(uri.getHost() + ":" + uri.getPath(), _mountParent);
             if(mountPoint == null) {
                 s_logger.error("Unable to create mount point for " + storageUrl);
-                throw new CloudRuntimeException("Unable to create mount point for " + storageUrl);
+                return "/mnt/sec"; // throw new CloudRuntimeException("Unable to create mount point for " + storageUrl);
             }
 
             _storageMounts.put(storageUrl, mountPoint);
@@ -874,24 +874,19 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
     
     @DB
     public Map<String, String> getNexusVSMCredentials(String hostGuid) {
-        CiscoNexusVSMDeviceVO nexusVSM = null;
-        ClusterVSMMapVO vsmMapVO = null;
+        s_logger.info("Reading credentials from DB.");
         HostVO host = _hostDao.findByGuid(hostGuid);
-        if (host != null)
-            vsmMapVO = _vsmMapDao.findByClusterId(host.getClusterId());
-        if (vsmMapVO != null)
-            nexusVSM = _nexusDao.findById(vsmMapVO.getVsmId());
-        Map<String, String> nexusVSMCredentials = new HashMap<String, String>();
-        if (nexusVSM != null) {
-            nexusVSMCredentials.put("vsmip", nexusVSM.getipaddr());
-            nexusVSMCredentials.put("vsmusername", nexusVSM.getUserName());
-            nexusVSMCredentials.put("vsmpassword", nexusVSM.getPassword());
-        } else {
-            nexusVSMCredentials.put("vsmip", "10.102.125.32");
-            nexusVSMCredentials.put("vsmusername", "admin");
-            nexusVSMCredentials.put("vsmpassword", "vCenter!9");
+        Map<String, String> vsmCredentials = null;
+        long clusterId;
+        if (host != null) {
+            clusterId = host.getClusterId();
+            s_logger.info("cluster is : " + clusterId);
+            vsmCredentials = getNexusVSMCredentialsByClusterId(clusterId);
         }
-        return nexusVSMCredentials;
+        else {
+            s_logger.info("Found invalid host object for hostGuid : " + hostGuid);
+        }
+        return vsmCredentials;
     }
 
     @Override @DB
@@ -1023,17 +1018,24 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
         ClusterVSMMapVO vsmMapVO = null;
 
         vsmMapVO = _vsmMapDao.findByClusterId(clusterId);
-        if (vsmMapVO != null)
-            nexusVSM = _nexusDao.findById(vsmMapVO.getVsmId());
+        long vsmId = 0;
+        if (vsmMapVO != null) {
+            vsmId = vsmMapVO.getVsmId(); 
+            s_logger.info("vsmId is " + vsmId);
+            nexusVSM = _nexusDao.findById(vsmId);
+            s_logger.info("Fetching nexus vsm credentials from database.");
+        }
+        else {
+            s_logger.info("Found empty vsmMapVO.");
+            return null;
+        }        
+
         Map<String, String> nexusVSMCredentials = new HashMap<String, String>();
         if (nexusVSM != null) {
             nexusVSMCredentials.put("vsmip", nexusVSM.getipaddr());
             nexusVSMCredentials.put("vsmusername", nexusVSM.getUserName());
             nexusVSMCredentials.put("vsmpassword", nexusVSM.getPassword());
-        } else {
-            nexusVSMCredentials.put("vsmip", "10.102.125.32");
-            nexusVSMCredentials.put("vsmusername", "admin");
-            nexusVSMCredentials.put("vsmpassword", "vCenter!9");
+            s_logger.info(nexusVSMCredentials.toString());
         }
         return nexusVSMCredentials;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index d715cd9..99008b0 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -65,11 +65,13 @@ import com.cloud.configuration.ConfigurationManager;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.dc.ClusterDetailsDao;
 import com.cloud.dc.ClusterVO;
+import com.cloud.dc.ClusterVSMMapVO;
 import com.cloud.dc.DataCenterIpAddressVO;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.HostPodVO;
 import com.cloud.dc.PodCluster;
 import com.cloud.dc.dao.ClusterDao;
+import com.cloud.dc.dao.ClusterVSMMapDao;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.DataCenterIpAddressDao;
 import com.cloud.dc.dao.HostPodDao;
@@ -92,12 +94,14 @@ import com.cloud.host.dao.HostTagsDao;
 import com.cloud.hypervisor.Hypervisor;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase;
+import com.cloud.network.CiscoNexusVSMDeviceVO;
 import com.cloud.network.IPAddressVO;
+import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
 import com.cloud.network.dao.IPAddressDao;
 import com.cloud.org.Cluster;
 import com.cloud.org.Grouping;
-import com.cloud.org.Managed;
 import com.cloud.org.Grouping.AllocationState;
+import com.cloud.org.Managed;
 import com.cloud.service.ServiceOfferingVO;
 import com.cloud.storage.GuestOSCategoryVO;
 import com.cloud.storage.StorageManager;
@@ -123,6 +127,7 @@ import com.cloud.user.UserContext;
 import com.cloud.utils.Pair;
 import com.cloud.utils.StringUtils;
 import com.cloud.utils.UriUtils;
+import com.cloud.utils.cisco.n1kv.vsm.NetconfHelper;
 import com.cloud.utils.component.Adapters;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -167,6 +172,10 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
     @Inject
     protected ClusterDao                     _clusterDao;
     @Inject
+    protected ClusterVSMMapDao _clusterVSMDao;
+    @Inject
+    protected CiscoNexusVSMDeviceDao _vsmDao;
+    @Inject
     protected CapacityDao 					 _capacityDao;
     @Inject
     protected HostDao                        _hostDao;
@@ -311,6 +320,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
         
     }
 
+    @DB
     @Override
     public List<? extends Cluster> discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException {
         long dcId = cmd.getZoneId();
@@ -421,6 +431,47 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
         clusterId = cluster.getId();
         result.add(cluster);
 
+        String vsmIp = cmd.getVSMIpaddress();
+        String vsmUser = cmd.getVSMUsername();
+        String vsmPassword = cmd.getVSMPassword();
+
+        if (vsmIp != null && vsmUser != null && vsmPassword != null) {
+            NetconfHelper netconfClient;
+            try {
+                netconfClient = new NetconfHelper(vsmIp, vsmUser, vsmPassword);
+                netconfClient.disconnect();
+            } catch (CloudRuntimeException e) {
+                String msg = "Invalid credentials supplied for user " + vsmUser + " for Cisco Nexus 1000v VSM at " + vsmIp;
+                s_logger.error(msg);
+                throw new CloudRuntimeException(msg);
+            }
+            // persist credentials in database
+            CiscoNexusVSMDeviceVO vsm = new CiscoNexusVSMDeviceVO(vsmIp, vsmUser, vsmPassword, "", "");
+            
+            Transaction txn = Transaction.currentTxn();
+            try {
+                txn.start();
+                vsm = _vsmDao.persist(vsm);
+                txn.commit();
+            } catch (Exception e) {
+                txn.rollback();
+                s_logger.error("Failed to persist VSM details to database. Exception: " + e.getMessage());
+                throw new CloudRuntimeException(e.getMessage());
+            }
+            
+            ClusterVSMMapVO connectorObj = new ClusterVSMMapVO(clusterId, vsm.getId());
+            txn = Transaction.currentTxn();
+            try {
+                txn.start();
+                _clusterVSMDao.persist(connectorObj);
+                txn.commit();
+            } catch (Exception e) {
+                txn.rollback();
+                s_logger.error("Failed to associate VSM with cluster: " + clusterName + ". Exception: " + e.getMessage());
+                throw new CloudRuntimeException(e.getMessage());
+            }
+        }
+
         if (clusterType == Cluster.ClusterType.CloudManaged) {
             return result;
         }
@@ -432,6 +483,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
         details.put("password", password);
         _clusterDetailsDao.persist(cluster.getId(), details);
 
+
         boolean success = false;
         try {
             try {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65199cd/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index 176f076..b79636f 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -128,7 +128,7 @@ public class HypervisorHostHelper {
 	}
 	
     public static Map<String, String> getValidatedVsmCredentials(VmwareContext context) throws Exception {
-		Map<String, String> vsmCredentials = context.getStockObject("vsmcredentials");
+        Map<String, String> vsmCredentials = context.getStockObject("vsmcredentials");
 		String msg;
 		if(vsmCredentials == null || vsmCredentials.size() != 3) {
 			msg = "Failed to retrieve required credentials of Nexus VSM from database.";