Added Vmware cluster info along with asa1kv appliance.

This is used to select the correct n1kv vsm for configuring the guest network
This commit is contained in:
Koushik Das 2013-03-01 00:50:55 +05:30
parent deed3cc951
commit 32223736c9
9 changed files with 86 additions and 111 deletions

View File

@ -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///////////////////
/////////////////////////////////////////////////////

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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();
}

View File

@ -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);
}
}
}

View File

@ -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;

View File

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