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` (
