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