Removing references to DataCenter - providers, using the networkoffering -> providers map instead.

TODO:
- Still leaving the provider columns in data_center schema as-is for CloudKit and BareMetal
- ExternalNetworkDeviceMgrImpl still needs to fix the dataCenter.setProviders calls and externalNetworkApplicance usage checks to see if zone has external networking.
This commit is contained in:
prachi 2011-10-24 17:59:52 -07:00
parent 766c898504
commit 780e0efe79
12 changed files with 135 additions and 106 deletions

View File

@ -74,8 +74,6 @@ public interface NetworkService {
NetworkProfile convertNetworkToNetworkProfile(long networkId);
Map<Service, Map<Capability, String>> getZoneCapabilities(long zoneId);
Map<Service, Map<Capability, String>> getNetworkCapabilities(long networkId, long zoneId);
boolean isNetworkAvailableInDomain(long networkId, long domainId);

View File

@ -165,7 +165,7 @@ public class DataCenterVO implements DataCenter {
public void setFirewallProvider(String firewallProvider) {
this.firewallProvider = firewallProvider;
}
public DataCenterVO(long id, String name, String description, String dns1, String dns2, String dns3, String dns4, String guestCidr, String domain, Long domainId, NetworkType zoneType, String zoneToken, String domainSuffix) {
this(name, description, dns1, dns2, dns3, dns4, guestCidr, domain, domainId, zoneType, zoneToken, domainSuffix);
this.id = id;
@ -221,7 +221,7 @@ public class DataCenterVO implements DataCenter {
public void setUserDataProvider(String userDataProvider) {
this.userDataProvider = userDataProvider;
}
@Override
public Long getDomainId() {
return domainId;

View File

@ -190,9 +190,9 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
return zoneId + "-" + name + "-" + ip;
}
protected HostVO getExternalNetworkAppliance(long zoneId, Host.Type type) {
protected HostVO getExternalNetworkAppliance(long zoneId, long networkOfferingId, Host.Type type) {
DataCenterVO zone = _dcDao.findById(zoneId);
if (!_networkMgr.zoneIsConfiguredForExternalNetworking(zoneId)) {
if (!_networkMgr.networkIsConfiguredForExternalNetworking(zoneId, networkOfferingId)) {
s_logger.debug("Zone " + zone.getName() + " is not configured for external networking.");
return null;
} else {
@ -389,7 +389,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
// Find the external load balancer in this zone
long zoneId = guestConfig.getDataCenterId();
DataCenterVO zone = _dcDao.findById(zoneId);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zoneId, Host.Type.ExternalLoadBalancer);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zoneId, guestConfig.getNetworkOfferingId(), Host.Type.ExternalLoadBalancer);
if (externalLoadBalancer == null) {
return false;
@ -433,7 +433,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
// Find the external load balancer in this zone
long zoneId = network.getDataCenterId();
DataCenterVO zone = _dcDao.findById(zoneId);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zoneId, Host.Type.ExternalLoadBalancer);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zoneId, network.getNetworkOfferingId(), Host.Type.ExternalLoadBalancer);
if (externalLoadBalancer == null) {
return false;
@ -443,7 +443,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
boolean externalLoadBalancerIsInline = externalLoadBalancerIsInline(externalLoadBalancer);
HostVO externalFirewall = null;
if (externalLoadBalancerIsInline) {
externalFirewall = getExternalNetworkAppliance(zoneId, Host.Type.ExternalFirewall);
externalFirewall = getExternalNetworkAppliance(zoneId, network.getNetworkOfferingId(), Host.Type.ExternalFirewall);
if (externalFirewall == null) {
String msg = "External load balancer in zone " + zone.getName() + " is inline, but no external firewall in this zone.";
s_logger.error(msg);
@ -675,7 +675,9 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
Host externalFirewall = _agentMgr.addHost(zoneId, resource, Host.Type.ExternalFirewall, hostDetails);
if (externalFirewall != null) {
zone.setFirewallProvider(Network.Provider.JuniperSRX.getName());
/* With NAAS, we no longer store default global providers with Zone.
*
zone.setFirewallProvider(Network.Provider.JuniperSRX.getName());
zone.setUserDataProvider(Network.Provider.DhcpServer.getName());
zone.setVpnProvider(null);
@ -695,7 +697,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
zone.setLoadBalancerProvider(Network.Provider.None.getName());
}
_dcDao.update(zone.getId(), zone);
_dcDao.update(zone.getId(), zone);*/
return externalFirewall;
} else {
return null;
@ -717,7 +719,9 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
try {
if (_agentMgr.maintain(hostId) && _agentMgr.deleteHost(hostId, false, false, caller)) {
DataCenterVO zone = _dcDao.findById(externalFirewall.getDataCenterId());
/* With NAAS, we do not have the concept of global providers stored with Zone
*
* DataCenterVO zone = _dcDao.findById(externalFirewall.getDataCenterId());
zone.setFirewallProvider(Network.Provider.VirtualRouter.getName());
zone.setUserDataProvider(Network.Provider.VirtualRouter.getName());
zone.setVpnProvider(Network.Provider.VirtualRouter.getName());
@ -742,7 +746,8 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
}
}
return _dcDao.update(zone.getId(), zone);
return _dcDao.update(zone.getId(), zone);*/
return true;
} else {
return false;
}
@ -796,7 +801,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
// Find the external firewall in this zone
long zoneId = network.getDataCenterId();
DataCenterVO zone = _dcDao.findById(zoneId);
HostVO externalFirewall = getExternalNetworkAppliance(zoneId, Host.Type.ExternalFirewall);
HostVO externalFirewall = getExternalNetworkAppliance(zoneId, network.getNetworkOfferingId(), Host.Type.ExternalFirewall);
if (externalFirewall == null) {
return false;
@ -877,7 +882,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
// Find the external firewall in this zone
long zoneId = network.getDataCenterId();
DataCenterVO zone = _dcDao.findById(zoneId);
HostVO externalFirewall = getExternalNetworkAppliance(zoneId, Host.Type.ExternalFirewall);
HostVO externalFirewall = getExternalNetworkAppliance(zoneId, network.getNetworkOfferingId(), Host.Type.ExternalFirewall);
if (externalFirewall == null) {
return false;
@ -947,7 +952,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
public boolean manageRemoteAccessVpn(boolean create, Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException {
HostVO externalFirewall = getExternalNetworkAppliance(network.getDataCenterId(), Host.Type.ExternalFirewall);
HostVO externalFirewall = getExternalNetworkAppliance(network.getDataCenterId(), network.getNetworkOfferingId(), Host.Type.ExternalFirewall);
if (externalFirewall == null) {
return false;
@ -986,7 +991,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
}
public boolean manageRemoteAccessVpnUsers(Network network, RemoteAccessVpn vpn, List<? extends VpnUser> vpnUsers) throws ResourceUnavailableException {
HostVO externalFirewall = getExternalNetworkAppliance(network.getDataCenterId(), Host.Type.ExternalFirewall);
HostVO externalFirewall = getExternalNetworkAppliance(network.getDataCenterId(), network.getNetworkOfferingId(), Host.Type.ExternalFirewall);
if (externalFirewall == null) {
return false;
@ -1271,14 +1276,20 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa
s_logger.debug("External network stats collector is running...");
for (DataCenterVO zone : _dcDao.listAll()) {
// Make sure the zone is configured for external networking
if (!_networkMgr.zoneIsConfiguredForExternalNetworking(zone.getId())) {
//FIXME: add another way to check if zone has external networking.
if (!_networkMgr.zoneIsConfiguredForExternalNetworking(zone.getId())) {
s_logger.debug("Zone " + zone.getName() + " is not configured for external networking, so skipping usage check.");
continue;
}
// Only collect stats if there is an external firewall in this zone
HostVO externalFirewall = getExternalNetworkAppliance(zone.getId(), Host.Type.ExternalFirewall);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zone.getId(), Host.Type.ExternalLoadBalancer);
//FIXME: add another way to check if zone has external networking.
HostVO externalFirewall = getExternalNetworkAppliance(zone.getId(), 0, Host.Type.ExternalFirewall);
HostVO externalLoadBalancer = getExternalNetworkAppliance(zone.getId(), 0, Host.Type.ExternalLoadBalancer);
if (externalFirewall == null) {
s_logger.debug("Skipping usage check for zone " + zone.getName());

View File

@ -187,10 +187,13 @@ public interface NetworkManager extends NetworkService {
Nic getDefaultNic(long vmId);
List<? extends PasswordServiceProvider> getPasswordResetElements();
@Deprecated
boolean zoneIsConfiguredForExternalNetworking(long zoneId);
boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkOfferingId);
Map<Capability, String> getServiceCapabilities(long zoneId, Long networkOfferingId, Service service);
Map<Capability, String> getServiceCapabilities(Long networkOfferingId, Service service);
boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException;

View File

@ -28,7 +28,6 @@ import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
@ -270,6 +269,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
private static HashMap<Service, List<Provider>> s_serviceToImplementedProvidersMap = new HashMap<Service, List<Provider>>();
private static HashMap<String, String> s_providerToNetworkElementMap = new HashMap<String, String>();
private NetworkElement getElementImplementingProvider(String providerName){
String elementName = s_providerToNetworkElementMap.get(providerName);
NetworkElement element = _networkElements.get(elementName);
return element;
}
@Override
public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp) throws InsufficientAddressCapacityException {
return fetchNewPublicIp(dcId, podId, null, owner, type, networkId, false, true, requestedIp);
@ -1794,7 +1799,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
// If networkDomain is not specified, take it from the global configuration
if (isServiceSupportedByNetworkOffering(networkOfferingId, Service.Dns)) {
Map<Network.Capability, String> dnsCapabilities = getServiceCapabilities(zoneId, networkOfferingId, Service.Dns);
Map<Network.Capability, String> dnsCapabilities = getServiceCapabilities(networkOfferingId, Service.Dns);
String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification);
if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) {
if (networkDomain != null) {
@ -2600,65 +2605,30 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
return _networksDao.getActiveNicsIn(networkId);
}
@Override
public Map<Service, Map<Capability, String>> getZoneCapabilities(long zoneId) {
DataCenterVO dc = _dcDao.findById(zoneId);
if (dc == null) {
throw new InvalidParameterValueException("Zone id=" + zoneId + " doesn't exist in the system.");
}
// Get all service providers from the datacenter
Map<Service, String> providers = new HashMap<Service, String>();
providers.put(Service.Firewall, dc.getFirewallProvider());
providers.put(Service.Lb, dc.getLoadBalancerProvider());
providers.put(Service.Vpn, dc.getVpnProvider());
providers.put(Service.Dns, dc.getDnsProvider());
providers.put(Service.Gateway, dc.getGatewayProvider());
providers.put(Service.UserData, dc.getUserDataProvider());
providers.put(Service.Dhcp, dc.getDhcpProvider());
Map<Service, Map<Capability, String>> zoneCapabilities = new HashMap<Service, Map<Capability, String>>();
for (NetworkElement element : _networkElements) {
if (providers.isEmpty()) {
break;
}
Map<Service, Map<Capability, String>> elementCapabilities = element.getCapabilities();
if (elementCapabilities != null) {
Iterator<Service> it = providers.keySet().iterator();
while (it.hasNext()) {
Service service = it.next();
String zoneProvider = providers.get(service);
if (zoneProvider != null) {
if (zoneProvider.equalsIgnoreCase(element.getProvider().getName())) {
if (elementCapabilities.containsKey(service)) {
Map<Capability, String> capabilities = elementCapabilities.get(service);
// Verify if Service support capability
if (capabilities != null) {
for (Capability capability : capabilities.keySet()) {
assert (service.containsCapability(capability)) : "Capability " + capability.getName() + " is not supported by the service " + service.getName();
}
}
zoneCapabilities.put(service, capabilities);
it.remove();
}
}
}
}
}
}
return zoneCapabilities;
}
@Override
public Map<Service, Map<Capability, String>> getNetworkCapabilities(long networkOfferingId, long zoneId) {
Map<Service, Map<Capability, String>> zoneCapabilities = getZoneCapabilities(zoneId);
Map<Service, Map<Capability, String>> networkCapabilities = new HashMap<Service, Map<Capability, String>>();
for (Service service : zoneCapabilities.keySet()) {
if (isServiceSupportedByNetworkOffering(networkOfferingId, service)) {
networkCapabilities.put(service, zoneCapabilities.get(service));
//list all services of this networkOffering
List<NetworkOfferingServiceMapVO> servicesMap = _ntwkOfferingSrvcDao.getServices(networkOfferingId);
for(NetworkOfferingServiceMapVO instance : servicesMap ){
Service service = Service.getService(instance.getService());
//FIXME what if a service has multiple providers in the same networkOffering?
if(networkCapabilities.containsKey(service)){
if(s_logger.isDebugEnabled()){
s_logger.debug("Network Offering: "+ networkOfferingId +" has multiple Providers associated for this Service:"+service.getName());
s_logger.debug("Returning the capabilities of the first Provider");
}
continue;
}
NetworkElement element = getElementImplementingProvider(instance.getProvider());
if(element != null){
Map<Service, Map<Capability, String>> elementCapabilities = element.getCapabilities();;
if (elementCapabilities != null && elementCapabilities.get(service) != null) {
networkCapabilities.put(service, elementCapabilities.get(instance.getService()));
}
}
}
@ -2666,18 +2636,35 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
@Override
public Map<Capability, String> getServiceCapabilities(long zoneId, Long networkOfferingId, Service service) {
public Map<Capability, String> getServiceCapabilities(Long networkOfferingId, Service service) {
if (!isServiceSupportedByNetworkOffering(networkOfferingId, service)) {
throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering id=" + networkOfferingId);
}
Map<Capability, String> serviceCapabilities = new HashMap<Capability, String>();
Map<Service, Map<Capability, String>> networkCapabilities = getZoneCapabilities(zoneId);
if (networkCapabilities.get(service) == null) {
throw new UnsupportedServiceException("Service " + service.getName() + " is not supported in zone id=" + zoneId);
//get the Provider for this Service for this offering
List<String> serviceProviderNames = _ntwkOfferingSrvcDao.getProvidersForService(networkOfferingId, service);
//FIXME we return the capabilities of the first provider of the service - what if we have multiple providers for same Service?
if(serviceProviderNames != null && !serviceProviderNames.isEmpty()){
NetworkElement element = getElementImplementingProvider(serviceProviderNames.get(0));
if(element != null){
Map<Service, Map<Capability, String>> elementCapabilities = element.getCapabilities();;
if (elementCapabilities == null || elementCapabilities.get(service) == null) {
throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + serviceProviderNames.get(0));
}
serviceCapabilities = elementCapabilities.get(service);
}
}else{
if(s_logger.isDebugEnabled()){
s_logger.debug("Network Offering: "+ networkOfferingId +" does not have any Providers associated for this Service:"+service.getName());
}
}
return networkCapabilities.get(service);
return serviceCapabilities;
}
@Override
@ -2907,6 +2894,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
@Override
@Deprecated
// try to use the method networkIsConfiguredForExternalNetworking instead
public boolean zoneIsConfiguredForExternalNetworking(long zoneId) {
DataCenterVO zone = _dcDao.findById(zoneId);
@ -2925,6 +2914,28 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
}
@Override
public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkOfferingId) {
DataCenterVO zone = _dcDao.findById(zoneId);
boolean usesJuniperForGatewayService = _ntwkOfferingSrvcDao.isProviderSupported(networkOfferingId, Service.Gateway, Network.Provider.JuniperSRX);
boolean usesJuniperForFirewallService = _ntwkOfferingSrvcDao.isProviderSupported(networkOfferingId, Service.Firewall, Network.Provider.JuniperSRX);
boolean usesNetscalarForLBService = _ntwkOfferingSrvcDao.isProviderSupported(networkOfferingId, Service.Lb, Network.Provider.NetscalerMPX);
if (zone.getNetworkType() == NetworkType.Advanced) {
if (usesJuniperForGatewayService && usesJuniperForFirewallService) {
return true;
} else if (_ntwkOfferingSrvcDao.isServiceSupported(networkOfferingId, Service.Gateway) && usesNetscalarForLBService) {
return true;
} else {
return false;
}
} else {
return usesJuniperForFirewallService;
}
}
@Override
public boolean isServiceSupportedByNetworkOffering(long networkOfferingId, Network.Service service) {
@ -3134,7 +3145,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
Map<Network.Capability, String> dnsCapabilities = getServiceCapabilities(network.getDataCenterId(), network.getNetworkOfferingId(), Service.Dns);
Map<Network.Capability, String> dnsCapabilities = getServiceCapabilities(network.getNetworkOfferingId(), Service.Dns);
String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification);
if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) {
throw new InvalidParameterValueException("Domain name change is not supported for network id=" + network.getNetworkOfferingId() + " in zone id=" + network.getDataCenterId());
@ -3893,8 +3904,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
if(enabled){
//TODO: need to check if the provider element is ready for the physical network.
String elementName = s_providerToNetworkElementMap.get(provider.getProviderName());
NetworkElement element = _networkElements.get(elementName);
NetworkElement element = getElementImplementingProvider(provider.getProviderName());
//element.isReady();
provider.setState(PhysicalNetworkServiceProvider.State.Enabled);
}else{

View File

@ -41,10 +41,9 @@ import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
import com.cloud.network.NetworkManager;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.Inject;
import com.cloud.vm.NicProfile;
@ -60,6 +59,7 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements LoadBa
@Inject NetworkManager _networkManager;
@Inject ExternalNetworkDeviceManager _externalNetworkManager;
@Inject ConfigurationManager _configMgr;
@Inject NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
private boolean canHandle(Network config) {
DataCenter zone = _configMgr.getZone(config.getDataCenterId());
@ -68,8 +68,8 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements LoadBa
return false;
}
return (_networkManager.zoneIsConfiguredForExternalNetworking(zone.getId()) &&
zone.getLoadBalancerProvider() != null && zone.getLoadBalancerProvider().equals(Network.Provider.F5BigIp.getName()));
return (_networkManager.networkIsConfiguredForExternalNetworking(zone.getId(), config.getNetworkOfferingId()) &&
_ntwkOfferingSrvcDao.isProviderSupported(config.getNetworkOfferingId(), Service.Lb, Network.Provider.F5BigIp));
}
@Override

View File

@ -47,7 +47,6 @@ import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VpnUser;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
@ -79,7 +78,7 @@ public class JuniperSRXExternalFirewallElement extends AdapterBase implements So
return false;
}
return _networkManager.zoneIsConfiguredForExternalNetworking(zone.getId());
return _networkManager.networkIsConfiguredForExternalNetworking(zone.getId(),config.getNetworkOfferingId());
}
@Override

View File

@ -41,10 +41,9 @@ import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
import com.cloud.network.NetworkManager;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.Inject;
import com.cloud.vm.NicProfile;
@ -60,6 +59,7 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
@Inject NetworkManager _networkManager;
@Inject ExternalNetworkDeviceManager _externalNetworkManager;
@Inject ConfigurationManager _configMgr;
@Inject NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
private boolean canHandle(Network config) {
DataCenter zone = _configMgr.getZone(config.getDataCenterId());
@ -68,8 +68,8 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
return false;
}
return (_networkManager.zoneIsConfiguredForExternalNetworking(zone.getId()) &&
zone.getLoadBalancerProvider() != null && zone.getLoadBalancerProvider().equals(Network.Provider.NetscalerMPX.getName()));
return (_networkManager.networkIsConfiguredForExternalNetworking(zone.getId(), config.getNetworkOfferingId()) &&
_ntwkOfferingSrvcDao.isProviderSupported(config.getNetworkOfferingId(), Service.Lb, Network.Provider.NetscalerMPX));
}
@Override

View File

@ -358,10 +358,10 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma
if (purpose == Purpose.LoadBalancing) {
if (!_elbEnabled) {
protocolCapabilities = _networkMgr.getServiceCapabilities(network.getDataCenterId(), network.getNetworkOfferingId(), Service.Lb);
protocolCapabilities = _networkMgr.getServiceCapabilities(network.getNetworkOfferingId(), Service.Lb);
}
} else {
protocolCapabilities = _networkMgr.getServiceCapabilities(network.getDataCenterId(), network.getNetworkOfferingId(), Service.Firewall);
protocolCapabilities = _networkMgr.getServiceCapabilities(network.getNetworkOfferingId(), Service.Firewall);
}
if (protocolCapabilities != null) {

View File

@ -88,7 +88,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
NetworkVO config = (NetworkVO) super.design(offering, plan, userSpecified, owner);
if (config == null) {
return null;
} else if (_networkMgr.zoneIsConfiguredForExternalNetworking(plan.getDataCenterId())) {
} else if (_networkMgr.networkIsConfiguredForExternalNetworking(plan.getDataCenterId(), config.getNetworkOfferingId())) {
config.setState(State.Allocated);
}
@ -103,7 +103,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
return null;
}
if (!_networkMgr.zoneIsConfiguredForExternalNetworking(config.getDataCenterId())) {
if (!_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getNetworkOfferingId())) {
return super.implement(config, offering, dest, context);
}
@ -176,7 +176,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
public NicProfile allocate(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm) throws InsufficientVirtualNetworkCapcityException,
InsufficientAddressCapacityException {
if (_networkMgr.zoneIsConfiguredForExternalNetworking(config.getDataCenterId()) && nic != null && nic.getRequestedIp() != null) {
if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getNetworkOfferingId()) && nic != null && nic.getRequestedIp() != null) {
throw new CloudRuntimeException("Does not support custom ip allocation at this time: " + nic);
}
@ -204,7 +204,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
return;
}
if (_networkMgr.zoneIsConfiguredForExternalNetworking(config.getDataCenterId())) {
if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getNetworkOfferingId())) {
nic.setIp4Address(null);
nic.setGateway(null);
nic.setNetmask(null);
@ -221,7 +221,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
return;
}
DataCenter dc = _dcDao.findById(config.getDataCenterId());
if (_networkMgr.zoneIsConfiguredForExternalNetworking(config.getDataCenterId())) {
if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getNetworkOfferingId())) {
nic.setBroadcastUri(config.getBroadcastUri());
nic.setIsolationUri(config.getBroadcastUri());
nic.setDns1(dc.getDns1());
@ -255,7 +255,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
}
NetworkVO network = _networkDao.findById(nic.getNetworkId());
if (network != null && _networkMgr.zoneIsConfiguredForExternalNetworking(network.getDataCenterId())) {
if (network != null && _networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getNetworkOfferingId())) {
return true;
} else {
return super.release(nic, vm, reservationId);

View File

@ -74,6 +74,7 @@ public class NetworkOfferingServiceMapDaoImpl extends GenericDaoBase<NetworkOffe
}
}
@Override
public List<String> getServicesForProvider(long networkOfferingId, Provider provider) {
List<String> services = new ArrayList<String>();

View File

@ -118,6 +118,7 @@ import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
import com.cloud.network.IPAddressVO;
import com.cloud.network.Network;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkVO;
import com.cloud.network.Networks.TrafficType;
@ -139,6 +140,7 @@ import com.cloud.offering.NetworkOffering.Availability;
import com.cloud.offering.ServiceOffering;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.org.Cluster;
import com.cloud.org.Grouping;
import com.cloud.projects.Project;
@ -346,6 +348,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
protected FirewallManager _firewallMgr;
@Inject
protected ProjectManager _projectMgr;
@Inject
protected NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
protected ScheduledExecutorService _executor = null;
protected int _expungeInterval;
@ -2691,6 +2695,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
List<NicVO> nics = _nicDao.listByVmId(vm.getId());
NicVO guestNic = null;
NetworkVO guestNetwork = null;
for (NicVO nic : nics) {
NetworkVO network = _networkDao.findById(nic.getNetworkId());
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
@ -2699,6 +2704,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
if (network.getTrafficType() == TrafficType.Guest) {
originalIp = nic.getIp4Address();
guestNic = nic;
guestNetwork = network;
}
}
boolean ipChanged = false;
@ -2717,7 +2723,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
if (ipChanged) {
DataCenterVO dc = _dcDao.findById(vm.getDataCenterIdToDeployIn());
UserVmVO userVm = profile.getVirtualMachine();
if (dc.getDhcpProvider().equalsIgnoreCase(Provider.ExternalDhcpServer.getName())){
//dc.getDhcpProvider().equalsIgnoreCase(Provider.ExternalDhcpServer.getName())
if (_ntwkOfferingSrvcDao.isProviderSupported(guestNetwork.getNetworkOfferingId(), Service.Dhcp, Provider.ExternalDhcpServer)){
_nicDao.update(guestNic.getId(), guestNic);
userVm.setPrivateIpAddress(guestNic.getIp4Address());
_vmDao.update(userVm.getId(), userVm);