- Send network labels to hypervisor recource during processConnect

- Create Default physicalnetwork and add traffic types while creating a zone
- DeleteProvider should error out if there are networks using the provider.
- Other validations
This commit is contained in:
prachi 2011-11-04 17:47:34 -07:00
parent 1f387b298d
commit 5f93665a30
29 changed files with 504 additions and 104 deletions

View File

@ -0,0 +1,39 @@
/**
* Copyright (C) 2011 Citrix Systems, Inc. All rights reserved
*
* This software is licensed under the GNU General Public License v3 or later.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.cloud.agent.api;
public class CheckNetworkAnswer extends Answer {
// indicate if agent reconnect is needed after setupNetworkNames command
private boolean _reconnect;
public CheckNetworkAnswer() {}
public CheckNetworkAnswer(CheckNetworkCommand cmd, boolean result, String details, boolean reconnect) {
super(cmd, result, details);
_reconnect = reconnect;
}
public CheckNetworkAnswer(CheckNetworkCommand cmd, boolean result, String details) {
this(cmd, result, details, false);
}
public boolean needReconnect() {
return _reconnect;
}
}

View File

@ -0,0 +1,43 @@
/**
* Copyright (C) 2011 Citrix Systems, Inc. All rights reserved
*
* This software is licensed under the GNU General Public License v3 or later.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.cloud.agent.api;
import java.util.List;
import com.cloud.network.PhysicalNetworkSetupInfo;
public class CheckNetworkCommand extends Command {
List<PhysicalNetworkSetupInfo> networkInfoList;
public CheckNetworkCommand(List<PhysicalNetworkSetupInfo> networkInfoList) {
this.networkInfoList = networkInfoList;
}
public List<PhysicalNetworkSetupInfo> getPhysicalNetworkInfoList() {
return networkInfoList;
}
protected CheckNetworkCommand() {
}
@Override
public boolean executeInSequence() {
return true;
}
}

View File

@ -58,6 +58,9 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
@Parameter(name=ApiConstants.VMWARE_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a VMware host")
private String vmwareLabel;
@Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="The VLAN id to be used for Management traffic by VMware host")
private String vlan;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -82,6 +85,14 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
return vmwareLabel;
}
public void setVlan(String vlan) {
this.vlan = vlan;
}
public String getVlan() {
return vlan;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -111,7 +122,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
@Override
public void create() throws ResourceAllocationException {
PhysicalNetworkTrafficType result = _networkService.addTrafficTypeToPhysicalNetwork(getPhysicalNetworkId(), getTrafficType(), getXenLabel(), getKvmLabel(), getVmwareLabel());
PhysicalNetworkTrafficType result = _networkService.addTrafficTypeToPhysicalNetwork(getPhysicalNetworkId(), getTrafficType(), getXenLabel(), getKvmLabel(), getVmwareLabel(), getVlan());
if (result != null) {
setEntityId(result.getId());
} else {
@ -128,5 +139,4 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
public String getEventDescription() {
return "Adding physical network traffic type: " + getEntityId();
}
}

View File

@ -28,6 +28,8 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.event.EventTypes;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
@Implementation(description="Deletes a Network Service Provider.", responseObject=SuccessResponse.class)
@ -69,13 +71,21 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd {
@Override
public void execute(){
boolean result = _networkService.deleteNetworkServiceProvider(getId());
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
this.setResponseObject(response);
} else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network service provider");
}
try{
boolean result = _networkService.deleteNetworkServiceProvider(getId());
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
this.setResponseObject(response);
} else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network service provider");
}
} catch (ResourceUnavailableException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
} catch (ConcurrentOperationException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage());
}
}

View File

@ -30,8 +30,6 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.ProviderResponse;
import com.cloud.event.EventTypes;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.user.Account;
@ -50,9 +48,6 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd {
@Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="network service provider id")
private Long id;
@Parameter(name=ApiConstants.FORCED, type=CommandType.BOOLEAN, required=false, description="Force shutdown the service provider.")
private Boolean forcedShutdown;
@Parameter(name=ApiConstants.SERVICE_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of services to be enabled for this physical network service provider")
private List<String> enabledServices;
@ -68,10 +63,6 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd {
return id;
}
public boolean isForcedShutdown() {
return (forcedShutdown != null) ? forcedShutdown : false;
}
public List<String> getEnabledServices() {
return enabledServices;
}
@ -91,23 +82,14 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd {
@Override
public void execute(){
PhysicalNetworkServiceProvider result;
try {
result = _networkService.updateNetworkServiceProvider(getId(), getState(), isForcedShutdown(), getEnabledServices());
if (result != null) {
ProviderResponse response = _responseGenerator.createNetworkServiceProviderResponse(result);
response.setResponseName(getCommandName());
this.setResponseObject(response);
}else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider to physical network");
}
} catch (ResourceUnavailableException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
} catch (ConcurrentOperationException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage());
}
PhysicalNetworkServiceProvider result = _networkService.updateNetworkServiceProvider(getId(), getState(), getEnabledServices());
if (result != null) {
ProviderResponse response = _responseGenerator.createNetworkServiceProviderResponse(result);
response.setResponseName(getCommandName());
this.setResponseObject(response);
}else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider to physical network");
}
}
@Override

View File

@ -102,9 +102,9 @@ public interface NetworkService {
List<? extends PhysicalNetworkServiceProvider> listNetworkServiceProviders(Long physicalNetworkId);
PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, boolean forcedShutdown, List<String> enabledServices) throws ConcurrentOperationException, ResourceUnavailableException;
PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List<String> enabledServices);
boolean deleteNetworkServiceProvider(Long id);
boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException;
PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId);
@ -116,7 +116,7 @@ public interface NetworkService {
long findPhysicalNetworkId(long zoneId, String tag);
PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel);
PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String vlan);
PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id);

View File

@ -0,0 +1,88 @@
/**
* Copyright (C) 2010 VMOps, Inc. All rights reserved.
*
* This software is licensed under the GNU General Public License v3 or later.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.cloud.network;
/**
* PhysicalNetworkNames provides the labels to identify per traffic type
* the physical networks available to the host .
*/
public class PhysicalNetworkSetupInfo {
//physical network ID as seen by Mgmt server
Long physicalNetworkId;
String privateNetworkName;
String publicNetworkName;
String guestNetworkName;
String storageNetworkName;
//this is used by VmWare to identify the vlan to use for management traffic
String mgmtVlan;
public PhysicalNetworkSetupInfo(){
}
public String getPrivateNetworkName() {
return privateNetworkName;
}
public String getPublicNetworkName() {
return publicNetworkName;
}
public String getGuestNetworkName() {
return guestNetworkName;
}
public String getStorageNetworkName() {
return storageNetworkName;
}
public void setPrivateNetworkName(String privateNetworkName) {
this.privateNetworkName = privateNetworkName;
}
public void setPublicNetworkName(String publicNetworkName) {
this.publicNetworkName = publicNetworkName;
}
public void setGuestNetworkName(String guestNetworkName) {
this.guestNetworkName = guestNetworkName;
}
public void setStorageNetworkName(String storageNetworkName) {
this.storageNetworkName = storageNetworkName;
}
public Long getPhysicalNetworkId() {
return physicalNetworkId;
}
public void setPhysicalNetworkId(Long physicalNetworkId) {
this.physicalNetworkId = physicalNetworkId;
}
public String getMgmtVlan() {
return mgmtVlan;
}
public void setMgmtVlan(String mgmtVlan) {
this.mgmtVlan = mgmtVlan;
}
}

View File

@ -116,14 +116,13 @@ public interface NetworkElement extends Adapter {
/**
* The network service provider is being shutdown. This should shutdown all instances of this element deployed for this provider.
* @param networkServiceProvider
* @param context
* @param forceShutdown
* @param networkServiceProvider
* @return boolean success/failure
* @throws ConcurrentOperationException
* @throws ResourceUnavailableException
*/
boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException, ResourceUnavailableException;
boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException;
/**
* This should return true if out of multiple services provided by this element, only some can be enabled. If all the services MUST be provided, this should return false.

View File

@ -64,6 +64,8 @@ import com.cloud.agent.api.BackupSnapshotCommand;
import com.cloud.agent.api.BumpUpPriorityCommand;
import com.cloud.agent.api.CheckHealthAnswer;
import com.cloud.agent.api.CheckHealthCommand;
import com.cloud.agent.api.CheckNetworkAnswer;
import com.cloud.agent.api.CheckNetworkCommand;
import com.cloud.agent.api.CheckOnHostAnswer;
import com.cloud.agent.api.CheckOnHostCommand;
import com.cloud.agent.api.CheckRouterAnswer;
@ -71,6 +73,8 @@ import com.cloud.agent.api.CheckRouterCommand;
import com.cloud.agent.api.CheckVirtualMachineAnswer;
import com.cloud.agent.api.CheckVirtualMachineCommand;
import com.cloud.agent.api.CleanupNetworkRulesCmd;
import com.cloud.agent.api.ClusterSyncAnswer;
import com.cloud.agent.api.ClusterSyncCommand;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand;
import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand;
@ -81,6 +85,8 @@ import com.cloud.agent.api.DeleteSnapshotBackupAnswer;
import com.cloud.agent.api.DeleteSnapshotBackupCommand;
import com.cloud.agent.api.DeleteSnapshotsDirCommand;
import com.cloud.agent.api.DeleteStoragePoolCommand;
import com.cloud.agent.api.GetDomRVersionAnswer;
import com.cloud.agent.api.GetDomRVersionCmd;
import com.cloud.agent.api.GetHostStatsAnswer;
import com.cloud.agent.api.GetHostStatsCommand;
import com.cloud.agent.api.GetStorageStatsAnswer;
@ -89,11 +95,7 @@ import com.cloud.agent.api.GetVmStatsAnswer;
import com.cloud.agent.api.GetVmStatsCommand;
import com.cloud.agent.api.GetVncPortAnswer;
import com.cloud.agent.api.GetVncPortCommand;
import com.cloud.agent.api.GetDomRVersionCmd;
import com.cloud.agent.api.GetDomRVersionAnswer;
import com.cloud.agent.api.HostStatsEntry;
import com.cloud.agent.api.ClusterSyncAnswer;
import com.cloud.agent.api.ClusterSyncCommand;
import com.cloud.agent.api.MaintainAnswer;
import com.cloud.agent.api.MaintainCommand;
import com.cloud.agent.api.ManageSnapshotAnswer;
@ -105,7 +107,6 @@ import com.cloud.agent.api.ModifyStoragePoolAnswer;
import com.cloud.agent.api.ModifyStoragePoolCommand;
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
import com.cloud.agent.api.PingRoutingWithOvsCommand;
import com.cloud.agent.api.PingTestCommand;
@ -180,6 +181,7 @@ import com.cloud.network.Networks;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.IsolationType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetworkSetupInfo;
import com.cloud.network.ovs.OvsCreateGreTunnelAnswer;
import com.cloud.network.ovs.OvsCreateGreTunnelCommand;
import com.cloud.network.ovs.OvsCreateTunnelAnswer;
@ -513,11 +515,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return execute((ClusterSyncCommand)cmd);
} else if (cmd instanceof GetDomRVersionCmd) {
return execute((GetDomRVersionCmd)cmd);
} else if (clazz == CheckNetworkCommand.class) {
return execute((CheckNetworkCommand) cmd);
} else {
return Answer.createUnsupportedCommandAnswer(cmd);
}
}
protected XsLocalNetwork getNativeNetworkForTraffic(Connection conn, TrafficType type, String tag) throws XenAPIException, XmlRpcException {
if (tag != null) {
if (s_logger.isDebugEnabled()) {
@ -4284,6 +4289,69 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
throw new CloudRuntimeException("Unable to get host information ", e);
}
}
protected CheckNetworkAnswer execute(CheckNetworkCommand cmd) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Checking if network name setup is done on the resource");
}
List<PhysicalNetworkSetupInfo> infoList = cmd.getPhysicalNetworkInfoList();
try{
boolean errorout = false;
String msg = "";
for(PhysicalNetworkSetupInfo info : infoList){
if(!isNetworkSetupByName(info.getGuestNetworkName())){
msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Guest Network is not configured on the backend by name " + info.getGuestNetworkName();
errorout = true;
break;
}
if(!isNetworkSetupByName(info.getPrivateNetworkName())){
msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Private Network is not configured on the backend by name " + info.getGuestNetworkName();
errorout = true;
break; }
if(!isNetworkSetupByName(info.getPublicNetworkName())){
msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Public Network is not configured on the backend by name " + info.getGuestNetworkName();
errorout = true;
break;
}
if(!isNetworkSetupByName(info.getStorageNetworkName())){
msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Storage Network is not configured on the backend by name " + info.getGuestNetworkName();
errorout = true;
break;
}
}
if(errorout){
s_logger.error(msg);
return new CheckNetworkAnswer(cmd, false, msg);
}else{
return new CheckNetworkAnswer(cmd, true , "Network Setup check by names is done");
}
}catch (XenAPIException e) {
String msg = "CheckNetworkCommand failed with XenAPIException:" + e.toString() + " host:" + _host.uuid;
s_logger.warn(msg, e);
return new CheckNetworkAnswer(cmd, false, msg);
}catch (Exception e) {
String msg = "CheckNetworkCommand failed with Exception:" + e.getMessage() + " host:" + _host.uuid;
s_logger.warn(msg, e);
return new CheckNetworkAnswer(cmd, false, msg);
}
}
protected boolean isNetworkSetupByName(String nameTag) throws XenAPIException, XmlRpcException{
if (nameTag != null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Looking for network setup by name " + nameTag);
}
Connection conn = getConnection();
XsLocalNetwork network = getNetworkByName(conn, nameTag);
if (network == null) {
return false;
}
}
return true;
}
protected List<File> getPatchFiles() {
return null;

View File

@ -190,7 +190,7 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
Vlan createVlanAndPublicIpRange(Long userId, Long zoneId, Long podId, String startIP, String endIP, String vlanGateway, String vlanNetmask, boolean forVirtualNetwork, String vlanId, Account account, Long networkId, Long physicalNetworkId) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException;
void createDefaultNetworks(long zoneId, boolean isSecurityGroupEnabled) throws ConcurrentOperationException;
void createDefaultNetworks(long zoneId, boolean isSecurityGroupEnabled, long physicalNetworkId) throws ConcurrentOperationException;
HostPodVO getPod(long id);

View File

@ -103,6 +103,7 @@ import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkVO;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkVO;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.NetworkDao;
@ -1361,8 +1362,11 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
zone = _zoneDao.persist(zone);
// Create default Physical Network
long physicalNetworkId = createDefaultPhysicalNetwork(zone.getId(), domainId);
// Create deafult networks
createDefaultNetworks(zone.getId(), isSecurityGroupEnabled);
createDefaultNetworks(zone.getId(), isSecurityGroupEnabled, physicalNetworkId);
txn.commit();
return zone;
} catch (Exception ex) {
@ -1374,8 +1378,27 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
}
private long createDefaultPhysicalNetwork(long zoneId, Long domainId){
//create entry
PhysicalNetwork defaultNetwork = _networkMgr.createPhysicalNetwork(zoneId, null, null, null, PhysicalNetwork.BroadcastDomainRange.ZONE.toString(), domainId, null);
String defaultXenLabel = "cloud-private";
//add default Traffic types to the physical network
_networkMgr.addTrafficTypeToPhysicalNetwork(defaultNetwork.getId(), TrafficType.Guest.toString(), defaultXenLabel, null, null, null);
_networkMgr.addTrafficTypeToPhysicalNetwork(defaultNetwork.getId(), TrafficType.Public.toString(), defaultXenLabel, null, null, null);
_networkMgr.addTrafficTypeToPhysicalNetwork(defaultNetwork.getId(), TrafficType.Management.toString(), defaultXenLabel, null, null, null);
_networkMgr.addTrafficTypeToPhysicalNetwork(defaultNetwork.getId(), TrafficType.Storage.toString(), defaultXenLabel, null, null, null);
return defaultNetwork.getId();
}
@Override
public void createDefaultNetworks(long zoneId, boolean isSecurityGroupEnabled) throws ConcurrentOperationException {
public void createDefaultNetworks(long zoneId, boolean isSecurityGroupEnabled, long physicalNetworkId) throws ConcurrentOperationException {
DataCenterVO zone = _zoneDao.findById(zoneId);
String networkDomain = null;
// Create public, management, control and storage networks as a part of
@ -1410,6 +1433,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
if (zone.getNetworkType() == NetworkType.Basic) {
isNetworkDefault = true;
broadcastDomainType = BroadcastDomainType.Native;
//set physicalnetworkId to the default Guest network in a basic Zone.
plan = new DataCenterDeployment(zone.getId(), null, null, null, null, physicalNetworkId);
} else if (offering.getGuestType() == GuestType.Shared && isSecurityGroupEnabled) {
isNetworkDefault = true;
} else {

View File

@ -260,7 +260,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
details.put(HostInfo.HOST_OS_KERNEL_VERSION, hostKernelVer);
details.put(HostInfo.HYPERVISOR_VERSION, xenVersion);
if (!params.containsKey("public.network.device") && _publicNic != null) {
/*if (!params.containsKey("public.network.device") && _publicNic != null) {
params.put("public.network.device", _publicNic);
details.put("public.network.device", _publicNic);
}
@ -283,7 +283,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
if (!params.containsKey("storage.network.device2") && _storageNic2 != null) {
params.put("storage.network.device2", _storageNic2);
details.put("storage.network.device2", _storageNic2);
}
}*/
params.put("wait", Integer.toString(_wait));
details.put("wait", Integer.toString(_wait));
params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString()));

View File

@ -47,8 +47,11 @@ import com.cloud.agent.Listener;
import com.cloud.agent.api.AgentControlAnswer;
import com.cloud.agent.api.AgentControlCommand;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.CheckNetworkAnswer;
import com.cloud.agent.api.CheckNetworkCommand;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
import com.cloud.agent.api.to.NicTO;
import com.cloud.alert.AlertManager;
import com.cloud.api.commands.AssociateIPAddrCmd;
@ -96,6 +99,7 @@ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.exception.UnsupportedServiceException;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.IpAddress.State;
import com.cloud.network.Network.Capability;
@ -270,6 +274,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Inject LoadBalancerDao _lbDao;
@Inject PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao;
@Inject AgentManager _agentMgr;
@Inject HostDao _hostDao;
private final HashMap<String, NetworkOfferingVO> _systemNetworks = new HashMap<String, NetworkOfferingVO>(5);
@ -3576,6 +3581,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
throw new InvalidParameterValueException("Please specify a valid zone.");
}
if(zone.getNetworkType() == NetworkType.Basic){
if(!_physicalNetworkDao.listByZone(zoneId).isEmpty()){
throw new CloudRuntimeException("Cannot add the physical network to basic zone id: "+zoneId+", there is a physical network already existing in this basic Zone");
}
}
if (tags != null && tags.size() > 1) {
throw new InvalidParameterException("Only one tag can be specified for a physical network at this time");
}
@ -3639,11 +3649,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
txn.commit();
return pNetwork;
} catch (Exception ex) {
txn.rollback();
s_logger.warn("Exception: ", ex);
throw new CloudRuntimeException("Fail to create a physical network");
} finally {
txn.close();
}
}
@ -3794,7 +3801,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
@ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_DELETE, eventDescription = "deleting physical network", async = true)
@DB
public boolean deletePhysicalNetwork(Long physicalNetworkId) {
// verify input parameters
@ -3802,11 +3808,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
if (pNetwork == null) {
throw new InvalidParameterValueException("Network id=" + physicalNetworkId + "doesn't exist in the system");
}
Transaction txn = Transaction.currentTxn();
checkIfPhysicalNetworkIsDeletable(physicalNetworkId);
txn.start();
// delete vlans for this zone
List<VlanVO> vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId);
@ -3830,7 +3834,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
boolean success = _physicalNetworkDao.remove(physicalNetworkId);
txn.commit();
return success;
}
@ -4020,11 +4023,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
txn.commit();
return nsp;
} catch (Exception ex) {
txn.rollback();
s_logger.warn("Exception: ", ex);
throw new CloudRuntimeException("Fail to add a provider to physical network");
} finally {
txn.close();
}
}
@ -4041,7 +4041,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
@ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_UPDATE, eventDescription = "Updating physical network ServiceProvider", async = true)
public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, boolean forcedShutdown, List<String> enabledServices) throws ConcurrentOperationException, ResourceUnavailableException {
public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, List<String> enabledServices){
PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id);
if(provider == null){
@ -4058,13 +4058,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
try {
state = PhysicalNetworkServiceProvider.State.valueOf(stateStr);
} catch (IllegalArgumentException ex) {
throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled or Shutdown}");
throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled}");
}
}
boolean update = false;
if(state != null){
if(state == PhysicalNetworkServiceProvider.State.Shutdown){
throw new InvalidParameterValueException("Updating the provider state to 'Shutdown' is not supported");
}
if(s_logger.isDebugEnabled()){
s_logger.debug("updating state of the service provider id=" + id + " on physical network: "+provider.getPhysicalNetworkId() + " to state: "+stateStr);
}
@ -4080,19 +4084,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
provider.setState(PhysicalNetworkServiceProvider.State.Disabled);
update = true;
break;
case Shutdown:
User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId());
//shutdown the network
ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount);
if(s_logger.isDebugEnabled()){
s_logger.debug("Shutting down the service provider id=" + id + " on physical network: "+provider.getPhysicalNetworkId());
}
if(element != null && element.shutdownProviderInstances(provider, context, forcedShutdown)){
provider.setState(PhysicalNetworkServiceProvider.State.Shutdown);
update = true;
}
break;
}
}
@ -4124,14 +4115,34 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
@ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_DELETE, eventDescription = "Deleting physical network ServiceProvider", async = true)
public boolean deleteNetworkServiceProvider(Long id) {
public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException {
PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id);
if(provider == null){
throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system");
}
//TODO provider instances?
//check if there are networks using this provider
List<NetworkVO> networks = _networksDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), provider.getProviderName());
if(networks != null && !networks.isEmpty()){
throw new CloudRuntimeException("Provider is not deletable because there are existing networks using this provider, please destroy all networks first");
}
User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId());
//shutdown the provider instances
ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount);
if(s_logger.isDebugEnabled()){
s_logger.debug("Shutting down the service provider id=" + id + " on physical network: "+provider.getPhysicalNetworkId());
}
NetworkElement element = getElementImplementingProvider(provider.getProviderName());
if(element == null){
throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'");
}
if(element != null && element.shutdownProviderInstances(provider, context)){
provider.setState(PhysicalNetworkServiceProvider.State.Shutdown);
}
return _pNSPDao.remove(id);
}
@ -4430,7 +4441,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true)
public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel) {
public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel, String vlan) {
// verify input parameters
PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId);
@ -4464,21 +4475,38 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
try {
txn.start();
// Create the new traffic type in the database
PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel);
if(xenLabel == null){
xenLabel = getDefaultXenNetworkLabel(trafficType);
}
PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, vlan);
pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType);
txn.commit();
return pNetworktrafficType;
} catch (Exception ex) {
txn.rollback();
s_logger.warn("Exception: ", ex);
throw new CloudRuntimeException("Fail to add a traffic type to physical network");
} finally {
txn.close();
}
}
private String getDefaultXenNetworkLabel(TrafficType trafficType){
String xenLabel = null;
switch(trafficType){
case Public: xenLabel = "cloud-public";
break;
case Guest: xenLabel = "cloud-guest";
break;
case Storage: xenLabel = "cloud-storage";
break;
case Management: xenLabel = "cloud-private";
break;
case Control: xenLabel = "cloud_link_local_network";
break;
}
return xenLabel;
}
@Override
@ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", async = true)
public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id){
@ -4556,49 +4584,115 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@Override
public boolean processAnswers(long agentId, long seq, Answer[] answers) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean processCommands(long agentId, long seq, Command[] commands) {
// TODO Auto-generated method stub
return false;
}
@Override
public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
// TODO Auto-generated method stub
return null;
}
@Override
public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
// TODO Auto-generated method stub
if (!(cmd instanceof StartupRoutingCommand )) {
return;
}
long hostId = host.getId();
StartupRoutingCommand startup = (StartupRoutingCommand)cmd;
String dataCenter = startup.getDataCenter();
long dcId = -1;
DataCenterVO dc = _dcDao.findByName(dataCenter);
if (dc == null) {
try {
dcId = Long.parseLong(dataCenter);
dc = _dcDao.findById(dcId);
} catch (final NumberFormatException e) {
}
}
if (dc == null) {
throw new IllegalArgumentException("Host " + startup.getPrivateIpAddress() + " sent incorrect data center: " + dataCenter);
}
dcId = dc.getId();
HypervisorType hypervisorType = startup.getHypervisorType();
List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
//list all physicalnetworks in the zone & for each get the network names
List<PhysicalNetworkVO> physicalNtwkList = _physicalNetworkDao.listByZone(dcId);
for(PhysicalNetworkVO pNtwk : physicalNtwkList){
String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType);
String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType);
String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType);
String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType);
//String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType);
PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo();
info.setPhysicalNetworkId(pNtwk.getId());
info.setGuestNetworkName(guestName);
info.setPrivateNetworkName(privateName);
info.setPublicNetworkName(publicName);
info.setStorageNetworkName(storageName);
PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management);
if(mgmtTraffic != null){
String vlan = mgmtTraffic.getVlan();
info.setMgmtVlan(vlan);
}
networkInfoList.add(info);
}
//send the names to the agent
if(s_logger.isDebugEnabled()){
s_logger.debug("Sending CheckNetworkCommand to check the Network is setup correctly on Agent");
}
CheckNetworkCommand nwCmd = new CheckNetworkCommand(networkInfoList);
CheckNetworkAnswer answer = (CheckNetworkAnswer) _agentMgr.easySend(hostId, nwCmd);
if (answer == null) {
s_logger.warn("Unable to get an answer to the CheckNetworkCommand from agent:" +host.getId());
throw new ConnectionException(true, "Unable to get an answer to the CheckNetworkCommand from agent: "+host.getId());
}
if (!answer.getResult()) {
s_logger.warn("Unable to setup agent " + hostId + " due to " + ((answer != null)?answer.getDetails():"return null"));
String msg = "Incorrect Network setup on agent, Reinitialize agent after network names are setup, details : " + answer.getDetails();
_alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, dcId, host.getPodId(), msg, msg);
throw new ConnectionException(true, msg);
}else{
if ( answer.needReconnect() ) {
throw new ConnectionException(false, "Reinitialize agent after network setup.");
}
if(s_logger.isDebugEnabled()){
s_logger.debug("Network setup is correct on Agent");
}
return;
}
}
@Override
public boolean processDisconnect(long agentId, Status state) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isRecurring() {
// TODO Auto-generated method stub
return false;
}
@Override
public int getTimeout() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean processTimeout(long agentId, long seq) {
// TODO Auto-generated method stub
return false;
}

View File

@ -77,4 +77,7 @@ public interface NetworkDao extends GenericDao<NetworkVO, Long> {
List<NetworkVO> listByPhysicalNetworkTrafficType(long physicalNetworkId, TrafficType trafficType);
List<NetworkVO> listBy(long accountId, long dataCenterId, Network.GuestType type, TrafficType trafficType);
List<NetworkVO> listByPhysicalNetworkAndProvider(long physicalNetworkId, String providerName);
}

View File

@ -369,6 +369,23 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements N
sc.setParameters("physicalNetworkId", physicalNetworkId);
return listBy(sc);
}
@Override
public List<NetworkVO> listByPhysicalNetworkAndProvider(long physicalNetworkId, String providerName) {
SearchBuilder<NetworkOfferingServiceMapVO> svcProviderMapSearch = _ntwkOffSvcMap.createSearchBuilder();
NetworkOfferingServiceMapVO svcProviderEntry = svcProviderMapSearch.entity();
svcProviderMapSearch.and("Provider", svcProviderMapSearch.entity().getProvider(), SearchCriteria.Op.EQ);
SearchBuilder<NetworkVO> networksSearch = createSearchBuilder();
networksSearch.and("physicalNetworkId", networksSearch.entity().getPhysicalNetworkId(), Op.EQ);
networksSearch.join("svcProviderMapSearch", svcProviderMapSearch, networksSearch.entity().getNetworkOfferingId(), svcProviderEntry.getNetworkOfferingId(), JoinBuilder.JoinType.INNER);
SearchCriteria<NetworkVO> sc = networksSearch.create();
sc.setJoinParameters("svcProviderMapSearch", "Provider", providerName);
sc.setParameters("physicalNetworkId", physicalNetworkId);
return listBy(sc);
}
@Override
public List<NetworkVO> listBy(long accountId, long dataCenterId, Network.GuestType type, TrafficType trafficType) {

View File

@ -27,4 +27,5 @@ public interface PhysicalNetworkTrafficTypeDao extends GenericDao<PhysicalNetwor
List<PhysicalNetworkTrafficTypeVO> listBy(long physicalNetworkId);
boolean isTrafficTypeSupported(long physicalNetworkId, TrafficType trafficType);
String getNetworkTag (long physicalNetworkId, TrafficType trafficType, HypervisorType hType);
PhysicalNetworkTrafficTypeVO findBy(long physicalNetworkId, TrafficType trafficType);
}

View File

@ -109,4 +109,12 @@ public class PhysicalNetworkTrafficTypeDaoImpl extends GenericDaoBase<PhysicalNe
}
return null;
}
@Override
public PhysicalNetworkTrafficTypeVO findBy(long physicalNetworkId, TrafficType trafficType){
SearchCriteria<PhysicalNetworkTrafficTypeVO> sc = physicalNetworkSearch.create();
sc.setParameters("physicalNetworkId", physicalNetworkId);
sc.setParameters("trafficType", trafficType);
return findOneBy(sc);
}
}

View File

@ -52,16 +52,20 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
@Column(name = "vmware_network_label")
private String vmwareNetworkLabel;
@Column(name = "vlan")
private String vlan;
public PhysicalNetworkTrafficTypeVO() {
}
public PhysicalNetworkTrafficTypeVO(long physicalNetworkId, TrafficType trafficType, String xenLabel, String kvmLabel, String vmwareLabel) {
public PhysicalNetworkTrafficTypeVO(long physicalNetworkId, TrafficType trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String vlan) {
this.physicalNetworkId = physicalNetworkId;
this.trafficType = trafficType;
this.xenNetworkLabel = xenLabel;
this.kvmNetworkLabel = kvmLabel;
this.vmwareNetworkLabel = vmwareLabel;
this.setVlan(vlan);
}
@Override
@ -104,6 +108,14 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
@Override
public String getVmwareNetworkLabel() {
return vmwareNetworkLabel;
}
public void setVlan(String vlan) {
this.vlan = vlan;
}
public String getVlan() {
return vlan;
}
}

View File

@ -114,7 +114,7 @@ public class BareMetalElement extends AdapterBase implements NetworkElement {
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException, ResourceUnavailableException {
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}

View File

@ -221,7 +221,7 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException, ResourceUnavailableException {
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
// TODO Auto-generated method stub
return true;
}

View File

@ -163,7 +163,7 @@ public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalan
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException,
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
// TODO Auto-generated method stub
return true;

View File

@ -131,7 +131,7 @@ public class ExternalDhcpElement extends AdapterBase implements NetworkElement {
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException, ResourceUnavailableException {
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
// TODO Auto-generated method stub
return true;
}

View File

@ -163,7 +163,7 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements LoadBa
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException,
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
// TODO Auto-generated method stub
return true;

View File

@ -260,7 +260,7 @@ public class JuniperSRXExternalFirewallElement extends AdapterBase implements So
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException,
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
// TODO Auto-generated method stub
return true;

View File

@ -162,7 +162,7 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException,
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
// TODO Auto-generated method stub
return true;

View File

@ -126,7 +126,7 @@ public class OvsElement extends AdapterBase implements NetworkElement {
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown)
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context)
throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}

View File

@ -97,7 +97,7 @@ public class SecurityGroupElement extends AdapterBase implements NetworkElement
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException, ResourceUnavailableException {
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}

View File

@ -439,7 +439,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
@Override
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context, boolean forceShutdown) throws ConcurrentOperationException,
public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), VirtualRouterProviderType.VirtualRouterElement);
if (element == null) {

View File

@ -1770,8 +1770,9 @@ CREATE TABLE `cloud`.`physical_network_traffic_types` (
`physical_network_id` bigint unsigned NOT NULL COMMENT 'id of the physical network',
`traffic_type` varchar(32) NOT NULL COMMENT 'type of traffic going through this network',
`xen_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a XenServer host',
`kvm_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a KVM host',
`vmware_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a VMware host',
`kvm_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a KVM host',
`vmware_network_label` varchar(255) DEFAULT 'vSwitch0' COMMENT 'The network name label of the physical device dedicated to this traffic on a VMware host',
`vlan` varchar(255) COMMENT 'The vlan tag to be sent down to a VMware host',
PRIMARY KEY (`id`),
CONSTRAINT `fk_physical_network_traffic_types__physical_network_id` FOREIGN KEY (`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE CASCADE,
UNIQUE KEY(`physical_network_id`, `traffic_type`)