From 0560254c04425705530a23a93002daede4b6dc3c Mon Sep 17 00:00:00 2001 From: sbalineni Date: Tue, 11 Mar 2014 18:28:33 +0000 Subject: [PATCH] internal lb support for contrail vpc Signed-off-by: Alena Prokharchyk --- .../network-elements/juniper-contrail/pom.xml | 1 - .../management/ContrailManagerImpl.java | 44 ++++++++++++++----- .../com/cloud/network/vpc/VpcManagerImpl.java | 4 +- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/plugins/network-elements/juniper-contrail/pom.xml b/plugins/network-elements/juniper-contrail/pom.xml index f32d5daf2bb..8e9866f4f55 100644 --- a/plugins/network-elements/juniper-contrail/pom.xml +++ b/plugins/network-elements/juniper-contrail/pom.xml @@ -54,7 +54,6 @@ org.apache.cloudstack cloud-plugin-network-internallb ${project.version} - test org.apache.cloudstack diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java index bf083fdfb05..cc87aa5cee1 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java @@ -241,8 +241,16 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager Map> serviceProviderMap = new HashMap>(); Set providerSet = new HashSet(); providerSet.add(provider); - final Service[] services = {Service.Connectivity, Service.Dhcp, Service.NetworkACL, Service.StaticNat, Service.SourceNat}; + final Service[] services = {Service.Connectivity, Service.Dhcp, Service.NetworkACL, Service.StaticNat, Service.SourceNat, Service.Lb}; for (Service svc : services) { + if (svc == Service.Lb) { + if(offeringName.equals(vpcRouterOfferingName)) { + Set lbProviderSet = new HashSet(); + lbProviderSet.add(Provider.InternalLbVm); + serviceProviderMap.put(svc, lbProviderSet); + } + continue; + } serviceProviderMap.put(svc, providerSet); } ConfigurationManager configMgr = (ConfigurationManager)_configService; @@ -251,6 +259,9 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager Network.GuestType.Isolated, false, null, false, null, false, true, null, true, null, false); voffer.setState(NetworkOffering.State.Enabled); + if (offeringName.equals(vpcRouterOfferingName)) { + voffer.setInternalLb(true); + } long id = voffer.getId(); _networkOfferingDao.update(id, voffer); return _networkOfferingDao.findById(id); @@ -277,8 +288,15 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager services.add(Service.StaticNat.getName()); services.add(Service.SourceNat.getName()); services.add(Service.Gateway.getName()); + services.add(Service.Lb.getName()); for (String svc: services) { + if (svc.equals(Service.Lb.getName())) { + List lbProviderSet = new ArrayList(); + lbProviderSet.add(Provider.InternalLbVm.getName()); + serviceProviderMap.put(svc, lbProviderSet); + continue; + } serviceProviderMap.put(svc, providerSet); } vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null); @@ -333,14 +351,19 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager } _controller = new ModelController(this, _api, _vmDao, _networksDao, _nicDao, _vlanDao, _ipAddressDao); - - _routerOffering = locateNetworkOffering(routerOfferingName, routerOfferingDisplayText, - Provider.JuniperContrailRouter); - _routerPublicOffering = locatePublicNetworkOffering(routerPublicOfferingName, routerPublicOfferingDisplayText, - Provider.JuniperContrailRouter); - _vpcRouterOffering = locateNetworkOffering(vpcRouterOfferingName, vpcRouterOfferingDisplayText, - Provider.JuniperContrailVpcRouter); - _vpcOffering = locateVpcOffering(); + try { + _routerOffering = locateNetworkOffering(routerOfferingName, routerOfferingDisplayText, + Provider.JuniperContrailRouter); + _routerPublicOffering = locatePublicNetworkOffering(routerPublicOfferingName, routerPublicOfferingDisplayText, + Provider.JuniperContrailRouter); + _vpcRouterOffering = locateNetworkOffering(vpcRouterOfferingName, vpcRouterOfferingDisplayText, + Provider.JuniperContrailVpcRouter); + _vpcOffering = locateVpcOffering(); + }catch (Exception ex) { + s_logger.debug("Exception in locating network offerings: " + ex); + ex.printStackTrace(); + throw new ConfigurationException(); + } _eventHandler.subscribe(); @@ -532,7 +555,8 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager List net_list = _physicalNetworkDao.listByZone(network.getDataCenterId()); for (PhysicalNetworkVO phys : net_list) { if(_physProviderDao.findByServiceProvider(phys.getId(), Provider.JuniperContrailRouter.getName()) != null || - _physProviderDao.findByServiceProvider(phys.getId(), Provider.JuniperContrailVpcRouter.getName()) != null) { + _physProviderDao.findByServiceProvider(phys.getId(), Provider.JuniperContrailVpcRouter.getName()) != null || + _physProviderDao.findByServiceProvider(phys.getId(), Provider.InternalLbVm.getName()) != null) { return true; } } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 80e4eda95e9..f53eb1f7cb7 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -1277,7 +1277,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis continue; } else { NetworkOffering otherOff = _entityMgr.findById(NetworkOffering.class, network.getNetworkOfferingId()); - if (_ntwkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb) && otherOff.getPublicLb()) { + //throw only if networks have different offerings with public lb support + if (_ntwkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb) && otherOff.getPublicLb() && + guestNtwkOff.getId() != otherOff.getId()) { throw new InvalidParameterValueException("Public LB service is already supported " + "by network " + network + " in VPC " + vpc); } }