Added Vmware cluster info along with asa1kv appliance.
This is used to select the correct n1kv vsm for configuring the guest network


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

Branch: refs/heads/cisco-vnmc-api-integration
Commit: 32223736c9a52a73a3e401c301cf7dc3534639d2
Parents: deed3cc
Author: Koushik Das <[email protected]>
Authored: Fri Mar 1 00:50:55 2013 +0530
Committer: Koushik Das <[email protected]>
Committed: Fri Mar 1 00:50:55 2013 +0530

----------------------------------------------------------------------
 .../api/commands/AddCiscoAsa1000vResourceCmd.java  |    8 ++
 .../cloud/network/cisco/CiscoAsa1000vDevice.java   |   13 ++--
 .../cloud/network/cisco/CiscoAsa1000vDeviceVO.java |   38 ++++-------
 .../cloud/network/cisco/CiscoVnmcController.java   |   14 ++--
 .../cloud/network/cisco/CiscoVnmcControllerVO.java |   51 ++++----------
 .../cloud/network/cisco/NetworkAsa1000vMap.java    |    6 +-
 .../network/dao/NetworkAsa1000vMapDaoImpl.java     |   24 ++++----
 .../cloud/network/element/CiscoVnmcElement.java    |   35 ++++------
 setup/db/create-schema.sql                         |    8 ++-
 9 files changed, 86 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
index 686d7d4..971bee5 100755
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/api/commands/AddCiscoAsa1000vResourceCmd.java
@@ -23,6 +23,7 @@ import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.PlugService;
 import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.ClusterResponse;
 import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
 import org.apache.log4j.Logger;
 
@@ -56,6 +57,9 @@ public class AddCiscoAsa1000vResourceCmd extends BaseCmd {
     @Parameter(name=ApiConstants.ASA_INSIDE_PORT_PROFILE, 
type=CommandType.STRING, required = true, description="Nexus port profile 
associated with inside interface of ASA 1000v")
     private String inPortProfile;
 
+    @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType 
= ClusterResponse.class, required=true, description="the Cluster ID")
+    private Long clusterId;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -72,6 +76,10 @@ public class AddCiscoAsa1000vResourceCmd extends BaseCmd {
         return inPortProfile;
     }
 
+    public Long getClusterId() {
+        return clusterId;
+    }
+
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
     /////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
index b433da6..3c5f682 100755
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDevice.java
@@ -23,16 +23,17 @@ import com.cloud.org.Grouping;
 
 public interface CiscoAsa1000vDevice extends Grouping, InternalIdentity, 
Identity {
 
-        long getId();
+    long getId();
 
-        String getUuid();
+    String getUuid();
 
-        void setUuid(String uuid);
+    void setUuid(String uuid);
 
-        long getPhysicalNetworkId();
+    long getPhysicalNetworkId();
 
-        String getManagementIp();
+    String getManagementIp();
 
-        String getInPortProfile();
+    String getInPortProfile();
 
+    long getClusterId();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
index 5871dff..ba85fb1 100755
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoAsa1000vDeviceVO.java
@@ -39,73 +39,63 @@ public class CiscoAsa1000vDeviceVO implements 
CiscoAsa1000vDevice {
 
     @Column(name="physical_network_id")
     private long physicalNetworkId;
-    
+
     @Column(name="management_ip")
     private String managementIp;
-    
+
     @Column(name="in_Port_profile")
     private String inPortProfile;
 
-    
+    @Column(name="cluster_id")
+    private long clusterId;
+
     public CiscoAsa1000vDeviceVO() {
         this.uuid = UUID.randomUUID().toString();
     }
 
     public CiscoAsa1000vDeviceVO(long physicalNetworkId,
-            String managementIp, String inPortProfile) {
+            String managementIp, String inPortProfile, long clusterId) {
         super();
         this.physicalNetworkId = physicalNetworkId;
         this.managementIp = managementIp;
         this.inPortProfile = inPortProfile;
         this.uuid = UUID.randomUUID().toString();
+        this.clusterId = clusterId;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getId()
-        */
     @Override
        public long getId() {
         return id;
     }
-    
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getUuid()
-        */
+
     @Override
        public String getUuid() {
         return uuid;
     }
 
-    /* (non-Javadoc)
-        * @see 
com.cloud.network.cisco.CiscoVnmcController#setUuid(java.lang.String)
-        */
     @Override
        public void setUuid(String uuid) {
         this.uuid = uuid;
     }
 
-    /* (non-Javadoc)
-        * @see 
com.cloud.network.cisco.CiscoVnmcController#getPhysicalNetworkId()
-        */
     @Override
        public long getPhysicalNetworkId() {
         return physicalNetworkId;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getProviderName()
-        */
     @Override
        public String getManagementIp() {
         return managementIp;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getDeviceName()
-        */
     @Override
        public String getInPortProfile() {
         return inPortProfile;
     }
-    
+
+    @Override
+    public long getClusterId() {
+        return clusterId;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
index 6d6feae..e756165 100644
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcController.java
@@ -23,18 +23,18 @@ import com.cloud.org.Grouping;
 
 public interface CiscoVnmcController extends Grouping, InternalIdentity, 
Identity {
 
-        long getId();
+    long getId();
 
-        String getUuid();
+    String getUuid();
 
-        void setUuid(String uuid);
+    void setUuid(String uuid);
 
-        long getPhysicalNetworkId();
+    long getPhysicalNetworkId();
 
-        long getHostId();
+    long getHostId();
 
-        String getProviderName();
+    String getProviderName();
 
-        String getDeviceName();
+    String getDeviceName();
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
index 69ac135..4207f1d 100644
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/CiscoVnmcControllerVO.java
@@ -33,23 +33,23 @@ public class CiscoVnmcControllerVO implements 
CiscoVnmcController {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name="id")
     private long id;
-    
+
     @Column(name="uuid")
     private String uuid;
-    
+
     @Column(name="host_id")
     private long hostId;
-    
+
     @Column(name="physical_network_id")
     private long physicalNetworkId;
-    
+
     @Column(name="provider_name")
     private String providerName;
-    
+
     @Column(name="device_name")
     private String deviceName;
 
-    
+
     public CiscoVnmcControllerVO() {
         this.uuid = UUID.randomUUID().toString();
     }
@@ -64,60 +64,39 @@ public class CiscoVnmcControllerVO implements 
CiscoVnmcController {
         this.uuid = UUID.randomUUID().toString();
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getId()
-        */
     @Override
-       public long getId() {
+    public long getId() {
         return id;
     }
-    
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getUuid()
-        */
+
     @Override
-       public String getUuid() {
+    public String getUuid() {
         return uuid;
     }
 
-    /* (non-Javadoc)
-        * @see 
com.cloud.network.cisco.CiscoVnmcController#setUuid(java.lang.String)
-        */
     @Override
-       public void setUuid(String uuid) {
+    public void setUuid(String uuid) {
         this.uuid = uuid;
     }
 
-    /* (non-Javadoc)
-        * @see 
com.cloud.network.cisco.CiscoVnmcController#getPhysicalNetworkId()
-        */
     @Override
-       public long getPhysicalNetworkId() {
+    public long getPhysicalNetworkId() {
         return physicalNetworkId;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getHostId()
-        */
     @Override
-       public long getHostId() {
+    public long getHostId() {
         return hostId;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getProviderName()
-        */
     @Override
-       public String getProviderName() {
+    public String getProviderName() {
         return providerName;
     }
 
-    /* (non-Javadoc)
-        * @see com.cloud.network.cisco.CiscoVnmcController#getDeviceName()
-        */
     @Override
-       public String getDeviceName() {
+    public String getDeviceName() {
         return deviceName;
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
index 6c8647a..2e004dc 100755
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/cisco/NetworkAsa1000vMap.java
@@ -22,10 +22,10 @@ import com.cloud.org.Grouping;
 
 public interface NetworkAsa1000vMap extends Grouping, InternalIdentity {
 
-        long getId();
+    long getId();
 
-        long getNetworkId();
+    long getNetworkId();
 
-        long getAsa1000vId();
+    long getAsa1000vId();
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
index 95d9286..7326a90 100755
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/dao/NetworkAsa1000vMapDaoImpl.java
@@ -32,27 +32,27 @@ public class NetworkAsa1000vMapDaoImpl extends 
GenericDaoBase<NetworkAsa1000vMap
     protected final SearchBuilder<NetworkAsa1000vMapVO> asa1000vSearch;
 
     public NetworkAsa1000vMapDaoImpl() {
-       networkSearch = createSearchBuilder();
-       networkSearch.and("networkId", networkSearch.entity().getNetworkId(), 
Op.EQ);
-       networkSearch.done();
+        networkSearch = createSearchBuilder();
+        networkSearch.and("networkId", networkSearch.entity().getNetworkId(), 
Op.EQ);
+        networkSearch.done();
 
-       asa1000vSearch = createSearchBuilder();
-       asa1000vSearch.and("asa1000vId", 
asa1000vSearch.entity().getAsa1000vId(), Op.EQ);
-       asa1000vSearch.done();
+        asa1000vSearch = createSearchBuilder();
+        asa1000vSearch.and("asa1000vId", 
asa1000vSearch.entity().getAsa1000vId(), Op.EQ);
+        asa1000vSearch.done();
     }
 
-       @Override
-       public NetworkAsa1000vMapVO findByNetworkId(long networkId) {
+    @Override
+    public NetworkAsa1000vMapVO findByNetworkId(long networkId) {
         SearchCriteria<NetworkAsa1000vMapVO> sc = networkSearch.create();
         sc.setParameters("networkId", networkId);
         return findOneBy(sc);
-       }
+    }
 
-       @Override
-       public NetworkAsa1000vMapVO findByAsa1000vId(long asa1000vId) {
+    @Override
+    public NetworkAsa1000vMapVO findByAsa1000vId(long asa1000vId) {
         SearchCriteria<NetworkAsa1000vMapVO> sc = asa1000vSearch.create();
         sc.setParameters("asa1000vId", asa1000vId);
         return findOneBy(sc);
-       }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
index 9639d5b..006874b 100644
--- 
a/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
+++ 
b/plugins/network-elements/cisco-vnmc/src/com/cloud/network/element/CiscoVnmcElement.java
@@ -261,24 +261,6 @@ public class CiscoVnmcElement extends AdapterBase 
implements SourceNatServicePro
             return false;
         }
 
-        List<ClusterVO> clusters = _clusterDao.listByDcHyType(zone.getId(), 
"VMware");
-        if (clusters.size() > 1) { //TODO: Actually zone should only have 
single Vmware cluster and no other HV clusters as Vnmc/Asa1kv requires N1kv 
switch
-            s_logger.error("Zone " + zone.getName() + " has multiple Vmware 
clusters, Cisco Vnmc device requires that zone has a single Vmware cluster");
-            return false;
-        }
-
-        ClusterVSMMapVO clusterVsmMap = 
_clusterVsmMapDao.findByClusterId(clusters.get(0).getId());
-        if (clusterVsmMap == null) {
-            s_logger.error("Vmware cluster " + clusters.get(0).getName() + " 
has no Cisco Nexus VSM device associated with it");
-            return false;
-        }
-
-        CiscoNexusVSMDeviceVO vsmDevice = 
_vsmDeviceDao.findById(clusterVsmMap.getVsmId());
-        if (vsmDevice == null) {
-            s_logger.error("Unable to load details of Cisco Nexus VSM device 
associated with cluster " + clusters.get(0).getName());
-            return false;
-        }
-
         List<CiscoVnmcControllerVO> devices = 
_ciscoVnmcDao.listByPhysicalNetwork(network.getPhysicalNetworkId());
         if (devices.isEmpty()) {
             s_logger.error("No Cisco Vnmc device on network " + 
network.getName());
@@ -314,6 +296,19 @@ public class CiscoVnmcElement extends AdapterBase 
implements SourceNatServicePro
                 return false;
             }
 
+            ClusterVO asaCluster = 
_clusterDao.findById(assignedAsa.getClusterId());
+            ClusterVSMMapVO clusterVsmMap = 
_clusterVsmMapDao.findByClusterId(assignedAsa.getClusterId());
+            if (clusterVsmMap == null) {
+                s_logger.error("Vmware cluster " + asaCluster.getName() + " 
has no Cisco Nexus VSM device associated with it");
+                return false;
+            }
+
+            CiscoNexusVSMDeviceVO vsmDevice = 
_vsmDeviceDao.findById(clusterVsmMap.getVsmId());
+            if (vsmDevice == null) {
+                s_logger.error("Unable to load details of Cisco Nexus VSM 
device associated with cluster " + asaCluster.getName());
+                return false;
+            }
+
             CiscoVnmcControllerVO ciscoVnmcDevice = devices.get(0);
             HostVO ciscoVnmcHost = 
_hostDao.findById(ciscoVnmcDevice.getHostId());
             _hostDao.loadDetails(ciscoVnmcHost);
@@ -342,7 +337,7 @@ public class CiscoVnmcElement extends AdapterBase 
implements SourceNatServicePro
                 s_logger.error("Failed to configure source NAT in Cisco VNMC 
device for network " + network.getName());
                 return false;
             }
-            
+
             // associate Asa 1000v instance with logical edge firewall
             if (!associateAsaWithLogicalEdgeFirewall(vlanId, 
assignedAsa.getManagementIp(), ciscoVnmcHost.getId())) {
                 s_logger.error("Failed to associate Cisco ASA 1000v (" + 
assignedAsa.getManagementIp() +
@@ -765,7 +760,7 @@ public class CiscoVnmcElement extends AdapterBase 
implements SourceNatServicePro
             throw new InvalidParameterValueException("Could not find phyical 
network with ID: " + physicalNetworkId);
         }
 
-        ciscoAsa1000vResource = new CiscoAsa1000vDeviceVO(physicalNetworkId, 
cmd.getManagementIp(), cmd.getInPortProfile());
+        ciscoAsa1000vResource = new CiscoAsa1000vDeviceVO(physicalNetworkId, 
cmd.getManagementIp(), cmd.getInPortProfile(), cmd.getClusterId());
         
_ciscoAsa1000vDao.persist((CiscoAsa1000vDeviceVO)ciscoAsa1000vResource);
                 
         return ciscoAsa1000vResource;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/32223736/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index e883b94..96c535a 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2428,7 +2428,7 @@ CREATE TABLE `cloud`.`external_cisco_vnmc_devices` (
   `provider_name` varchar(255) NOT NULL COMMENT 'Service Provider name 
corresponding to this cisco vnmc device',
   `device_name` varchar(255) NOT NULL COMMENT 'name of the cisco vnmc device',
   `host_id` bigint unsigned NOT NULL COMMENT 'host id coresponding to the 
external cisco vnmc device',
-  PRIMARY KEY  (`id`),
+  PRIMARY KEY (`id`),
   CONSTRAINT `fk_external_cisco_vnmc_devices__host_id` FOREIGN KEY (`host_id`) 
REFERENCES `host`(`id`) ON DELETE CASCADE,
   CONSTRAINT `fk_external_cisco_vnmc_devices__physical_network_id` FOREIGN KEY 
(`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -2439,8 +2439,10 @@ CREATE TABLE `cloud`.`external_cisco_asa1000v_devices` (
   `physical_network_id` bigint unsigned NOT NULL COMMENT 'id of the physical 
network in to which cisco asa1kv device is added',
   `management_ip` varchar(255) UNIQUE NOT NULL COMMENT 'mgmt. ip of cisco 
asa1kv device',
   `in_port_profile` varchar(255) NOT NULL COMMENT 'inside port profile name of 
cisco asa1kv device',
-  PRIMARY KEY  (`id`),
-  CONSTRAINT `fk_external_cisco_asa1000v_devices__physical_network_id` FOREIGN 
KEY (`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE 
CASCADE
+  `cluster_id` bigint unsigned NOT NULL COMMENT 'id of the Vmware cluster to 
which cisco asa1kv device is attached (cisco n1kv switch)',
+  PRIMARY KEY (`id`),
+  CONSTRAINT `fk_external_cisco_asa1000v_devices__physical_network_id` FOREIGN 
KEY (`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE 
CASCADE,
+  CONSTRAINT `fk_external_cisco_asa1000v_devices__cluster_id` FOREIGN KEY 
(`cluster_id`) REFERENCES `cluster`(`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE `cloud`.`network_asa1000v_map` (

Reply via email to