mirror of https://github.com/apache/cloudstack.git
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:
parent
deed3cc951
commit
32223736c9
|
|
@ -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///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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` (
|
||||
|
|
|
|||
Loading…
Reference in New Issue