You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ya...@apache.org on 2014/01/31 03:14:11 UTC
git commit: updated refs/heads/master to ed3e1b9
Updated Branches:
refs/heads/master 0e2e6995b -> ed3e1b95b
VPC Support for contrail networking
Signed-off-by: Sheng Yang <sh...@citrix.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ed3e1b95
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ed3e1b95
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ed3e1b95
Branch: refs/heads/master
Commit: ed3e1b95b01ed5f84619c2bb1fed816b71528551
Parents: 0e2e699
Author: sbalineni <sb...@contrailsystems.com>
Authored: Wed Jan 8 03:16:55 2014 +0000
Committer: Sheng Yang <sh...@citrix.com>
Committed: Thu Jan 30 18:13:48 2014 -0800
----------------------------------------------------------------------
api/src/com/cloud/network/Network.java | 1 +
.../contrail/spring-contrail-context.xml | 4 +
.../contrail/management/ContrailGuru.java | 24 ++-
.../contrail/management/ContrailManager.java | 11 +
.../management/ContrailManagerImpl.java | 121 ++++++++++-
.../management/ContrailVpcElementImpl.java | 199 +++++++++++++++++++
.../contrail/management/ServerDBSyncImpl.java | 18 +-
.../contrail/model/NetworkPolicyModel.java | 2 +-
.../configuration/ConfigurationManagerImpl.java | 4 +-
.../com/cloud/network/vpc/VpcManagerImpl.java | 4 +-
10 files changed, 374 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java
index 62151a4..6dc6752 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -113,6 +113,7 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I
public static final Provider VirtualRouter = new Provider("VirtualRouter", false);
public static final Provider JuniperContrailRouter = new Provider("JuniperContrailRouter", false);
+ public static final Provider JuniperContrailVpcRouter = new Provider("JuniperContrailVpcRouter", false);
public static final Provider JuniperSRX = new Provider("JuniperSRX", true);
public static final Provider PaloAlto = new Provider("PaloAlto", true);
public static final Provider F5BigIp = new Provider("F5BigIp", true);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml b/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
index 4614af7..99ab02e 100644
--- a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
+++ b/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/contrail/spring-contrail-context.xml
@@ -32,6 +32,10 @@
class="org.apache.cloudstack.network.contrail.management.ContrailElementImpl">
<property name="name" value="ContrailElement"/>
</bean>
+ <bean id="ContrailVpcElement"
+ class="org.apache.cloudstack.network.contrail.management.ContrailVpcElementImpl">
+ <property name="name" value="ContrailVpcElement"/>
+ </bean>
<bean id="ContrailGuru"
class="org.apache.cloudstack.network.contrail.management.ContrailGuru">
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
index 704dedd..0bb95dd 100644
--- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailGuru.java
@@ -19,6 +19,7 @@ package org.apache.cloudstack.network.contrail.management;
import java.io.IOException;
import java.net.URI;
+import java.util.List;
import javax.inject.Inject;
import javax.ejb.Local;
@@ -54,6 +55,8 @@ import com.cloud.network.guru.NetworkGuru;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.dao.PhysicalNetworkVO;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.addr.PublicIp;
import com.cloud.offering.NetworkOffering;
import com.cloud.user.Account;
import com.cloud.utils.component.AdapterBase;
@@ -94,7 +97,7 @@ public class ContrailGuru extends AdapterBase implements NetworkGuru {
private boolean canHandle(NetworkOffering offering, NetworkType networkType, PhysicalNetwork physicalNetwork) {
if (networkType == NetworkType.Advanced
- && offering.getId() == _manager.getRouterOffering().getId()
+ && (offering.getId() == _manager.getRouterOffering().getId() || offering.getId() == _manager.getVpcRouterOffering().getId())
&& isMyTrafficType(offering.getTrafficType())
&& offering.getGuestType() == Network.GuestType.Isolated
&& physicalNetwork.getIsolationMethods().contains("L3VPN"))
@@ -148,6 +151,25 @@ public class ContrailGuru extends AdapterBase implements NetworkGuru {
return network;
}
_manager.getDatabase().getVirtualNetworks().add(vnModel);
+
+ if (network.getVpcId() != null) {
+ List<IPAddressVO> ips = _ipAddressDao.listByAssociatedVpc(network.getVpcId(), true);
+ if (ips.isEmpty()) {
+ s_logger.debug("Creating a source nat ip for network " + network);
+ Account owner = _accountMgr.getAccount(network.getAccountId());
+ try {
+ PublicIp publicIp = _ipAddrMgr.assignSourceNatIpAddressToGuestNetwork(owner, network);
+ IPAddressVO ip = publicIp.ip();
+ ip.setVpcId(network.getVpcId());
+ _ipAddressDao.acquireInLockTable(ip.getId());
+ _ipAddressDao.update(ip.getId(), ip);
+ _ipAddressDao.releaseFromLockTable(ip.getId());
+ } catch (Exception e) {
+ s_logger.error("Unable to allocate source nat ip: " + e);
+ }
+ }
+ }
+
return network;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java
index 6853d1e..1fe1303 100644
--- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java
@@ -38,12 +38,19 @@ import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.offering.NetworkOffering;
import com.cloud.projects.ProjectVO;
import com.cloud.network.vpc.NetworkACLVO;
+import com.cloud.network.vpc.VpcOffering;
+import com.cloud.network.vpc.VpcVO;
public interface ContrailManager {
public static final String routerOfferingName = "Juniper Contrail Network Offering";
public static final String routerOfferingDisplayText = "Juniper Contrail Network Offering";
public static final String routerPublicOfferingName = "Juniper Contrail Public Network Offering";
public static final String routerPublicOfferingDisplayText = "Juniper Contrail Public Network Offering";
+ public static final String vpcRouterOfferingName = "Juniper Contrail VPC Network Offering";
+ public static final String vpcRouterOfferingDisplayText = "Juniper Contrail VPC Network Offering";
+ public static final String juniperVPCOfferingName = "Juniper Contrail VPC Offering";
+ public static final String juniperVPCOfferingDisplayText = "Juniper Contrail VPC Offering";
+
public static final int DB_SYNC_INTERVAL_DEFAULT = 600000;
public static final String VNC_ROOT_DOMAIN = "default-domain";
public static final String VNC_DEFAULT_PROJECT = "default-project";
@@ -51,6 +58,8 @@ public interface ContrailManager {
public NetworkOffering getRouterOffering();
public NetworkOffering getPublicRouterOffering();
+ public NetworkOffering getVpcRouterOffering();
+ public VpcOffering getVpcOffering();
public void syncNetworkDB(short syncMode) throws IOException;
@@ -116,6 +125,8 @@ public interface ContrailManager {
public List<IPAddressVO> findManagedPublicIps();
+ public List<VpcVO> findManagedVpcs();
+
public List<NetworkACLVO> findManagedACLs();
public VirtualNetwork findDefaultVirtualNetwork(TrafficType trafficType) throws IOException;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java
----------------------------------------------------------------------
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 ef76e4c..616a8c5 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
@@ -81,6 +81,12 @@ import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.projects.ProjectVO;
import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.network.vpc.dao.VpcDao;
+import com.cloud.network.vpc.dao.VpcOfferingDao;
+import com.cloud.network.vpc.VpcOffering;
+import com.cloud.network.vpc.VpcOfferingVO;
+import com.cloud.network.vpc.VpcProvisioningService;
+import com.cloud.network.vpc.VpcVO;
import com.cloud.network.vpc.NetworkACLVO;
import com.cloud.projects.dao.ProjectDao;
import com.cloud.user.Account;
@@ -132,6 +138,12 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
@Inject
UserVmDao _vmDao;
@Inject
+ VpcOfferingDao _vpcOffDao;
+ @Inject
+ VpcProvisioningService _vpcProvSvc;
+ @Inject
+ VpcDao _vpcDao;
+ @Inject
NetworkACLDao _networkAclDao;
private static final Logger s_logger = Logger.getLogger(ContrailManager.class);
@@ -141,6 +153,9 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
private NetworkOffering _offering;
private NetworkOffering _routerOffering;
private NetworkOffering _routerPublicOffering;
+ private NetworkOffering _vpcRouterOffering;
+ private VpcOffering _vpcOffering;
+
private Timer _dbSyncTimer;
private int _dbSyncInterval = DB_SYNC_INTERVAL_DEFAULT;
private final String configuration = "contrail.properties";
@@ -175,7 +190,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
return _database;
}
- private NetworkOffering LocatePublicNetworkOffering(String offeringName,
+ private NetworkOffering locatePublicNetworkOffering(String offeringName,
String offeringDisplayText, Provider provider) {
List<? extends NetworkOffering> offerList = _configService.listNetworkOfferings(TrafficType.Public, false);
for (NetworkOffering offer: offerList) {
@@ -210,7 +225,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
return _networkOfferingDao.findById(id);
}
- private NetworkOffering LocateNetworkOffering(String offeringName,
+ private NetworkOffering locateNetworkOffering(String offeringName,
String offeringDisplayText, Provider provider) {
List<? extends NetworkOffering> offerList = _configService.listNetworkOfferings(TrafficType.Guest, false);
for (NetworkOffering offer : offerList) {
@@ -239,6 +254,38 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
return _networkOfferingDao.findById(id);
}
+ private VpcOffering locateVpcOffering() {
+ VpcOffering vpcOffer = _vpcOffDao.findByUniqueName(juniperVPCOfferingName);
+ if (vpcOffer != null) {
+ if (((VpcOfferingVO)vpcOffer).getState() == VpcOffering.State.Enabled) {
+ return vpcOffer;
+ }
+ ((VpcOfferingVO)vpcOffer).setState(VpcOffering.State.Enabled);
+ long id = vpcOffer.getId();
+ _vpcOffDao.update(id, (VpcOfferingVO)vpcOffer);
+ return vpcOffer;
+ }
+ Map<String, List<String>> serviceProviderMap = new HashMap<String, List<String>>();
+ List<String> providerSet = new ArrayList<String>();
+ providerSet.add(Provider.JuniperContrailVpcRouter.getName());
+ final List<String> services = new ArrayList<String>();
+ services.add(Service.Connectivity.getName());
+ services.add(Service.Dhcp.getName());
+ services.add(Service.NetworkACL.getName());
+ services.add(Service.StaticNat.getName());
+ services.add(Service.SourceNat.getName());
+ services.add(Service.Gateway.getName());
+
+ for (String svc: services) {
+ serviceProviderMap.put(svc, providerSet);
+ }
+ vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null);
+ ((VpcOfferingVO)vpcOffer).setState(VpcOffering.State.Enabled);
+ long id = vpcOffer.getId();
+ _vpcOffDao.update(id, (VpcOfferingVO)vpcOffer);
+ return _vpcOffDao.findById(id);
+ }
+
private NetworkOffering EnableNetworkOffering(long id) {
NetworkOfferingVO offering = _networkOfferingDao.createForUpdate(id);
offering.setState(NetworkOffering.State.Enabled);
@@ -281,10 +328,13 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
_controller = new ModelController(this, _api, _vmDao, _networksDao, _nicDao, _vlanDao, _ipAddressDao);
- _routerOffering = LocateNetworkOffering(routerOfferingName, routerOfferingDisplayText,
+ _routerOffering = locateNetworkOffering(routerOfferingName, routerOfferingDisplayText,
Provider.JuniperContrailRouter);
- _routerPublicOffering = LocatePublicNetworkOffering(routerPublicOfferingName, routerPublicOfferingDisplayText,
+ _routerPublicOffering = locatePublicNetworkOffering(routerPublicOfferingName, routerPublicOfferingDisplayText,
Provider.JuniperContrailRouter);
+ _vpcRouterOffering = locateNetworkOffering(vpcRouterOfferingName, vpcRouterOfferingDisplayText,
+ Provider.JuniperContrailVpcRouter);
+ _vpcOffering = locateVpcOffering();
_eventHandler.subscribe();
@@ -304,6 +354,16 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
}
@Override
+ public NetworkOffering getVpcRouterOffering() {
+ return _vpcRouterOffering;
+ }
+
+ @Override
+ public VpcOffering getVpcOffering() {
+ return _vpcOffering;
+ }
+
+ @Override
public String getPhysicalNetworkName(PhysicalNetworkVO physNet) {
String physname = physNet.getName();
physname = physname.replaceAll("\\s", "").replace("_", "");
@@ -465,7 +525,8 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
public boolean isManagedPhysicalNetwork(Network network) {
List<PhysicalNetworkVO> net_list = _physicalNetworkDao.listByZone(network.getDataCenterId());
for (PhysicalNetworkVO phys : net_list) {
- if (_physProviderDao.findByServiceProvider(phys.getId(), Network.Provider.JuniperContrailRouter.getName()) != null) {
+ if(_physProviderDao.findByServiceProvider(phys.getId(), Provider.JuniperContrailRouter.getName()) != null ||
+ _physProviderDao.findByServiceProvider(phys.getId(), Provider.JuniperContrailVpcRouter.getName()) != null) {
return true;
}
}
@@ -564,6 +625,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
SearchCriteria<NetworkVO> sc = searchBuilder.create();
List<Long> offerings = new ArrayList<Long>();
offerings.add(getRouterOffering().getId());
+ offerings.add(getVpcRouterOffering().getId());
offerings.add(getPublicRouterOffering().getId());
sc.setParameters("networkOfferingId", offerings.toArray());
@@ -585,9 +647,11 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
List<PhysicalNetworkVO> phys_list = _physicalNetworkDao.listAll();
final String provider = Network.Provider.JuniperContrailRouter.getName();
+ final String vpcProvider = Provider.JuniperContrailVpcRouter.getName();
for (Iterator<PhysicalNetworkVO> iter = phys_list.iterator(); iter.hasNext();) {
PhysicalNetworkVO phys = iter.next();
- if (_physProviderDao.findByServiceProvider(phys.getId(), provider) != null) {
+ if (_physProviderDao.findByServiceProvider(phys.getId(), provider) != null ||
+ _physProviderDao.findByServiceProvider(phys.getId(), vpcProvider) != null) {
List<NetworkVO> infraNets = new ArrayList<NetworkVO>();
findInfrastructureNetworks(phys, infraNets);
for (NetworkVO net : infraNets) {
@@ -612,9 +676,50 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
}
@Override
+ public List<VpcVO> findManagedVpcs() {
+ SearchBuilder<VpcVO> searchBuilder = _vpcDao.createSearchBuilder();
+ searchBuilder.and("vpcOffering", searchBuilder.entity().getVpcOfferingId(), Op.EQ);
+ SearchCriteria<VpcVO> sc = searchBuilder.create();
+ sc.setParameters("vpcOffering", getVpcOffering().getId());
+ List<VpcVO> vpcs = _vpcDao.search(sc, null);
+ if (vpcs == null || vpcs.size() == 0) {
+ s_logger.debug("no vpcs found");
+ return null;
+ }
+ return vpcs;
+ }
+
+ @Override
public List<NetworkACLVO> findManagedACLs() {
- /* contrail vpc is not yet implemented */
- return null;
+ List<VpcVO> vpcs = findManagedVpcs();
+ if (vpcs == null || vpcs.isEmpty()) {
+ return null;
+ }
+ List<Long> vpcIds = new ArrayList<Long>();
+ /* default-allow, default-deny ACLs will be under vpcId '0', so include it*/
+ vpcIds.add((long)0);
+ for (VpcVO vpc:vpcs) {
+ vpcIds.add(vpc.getId());
+ }
+ SearchBuilder<NetworkACLVO> searchBuilder = _networkAclDao.createSearchBuilder();
+ searchBuilder.and("vpcId", searchBuilder.entity().getVpcId(), Op.IN);
+ SearchCriteria<NetworkACLVO> sc = searchBuilder.create();
+ sc.setParameters("vpcId", vpcIds.toArray());
+ List<NetworkACLVO> acls = _networkAclDao.search(sc, null);
+ if (acls == null || acls.size() == 0) {
+ s_logger.debug("no acls found");
+ return null;
+ }
+ /* only return if acl is associated to any network */
+ List<NetworkACLVO> jnprAcls = new ArrayList<NetworkACLVO>();
+ for (NetworkACLVO acl:acls) {
+ List<NetworkVO> nets = _networksDao.listByAclId(acl.getId());
+ if (nets == null || nets.isEmpty()) {
+ continue;
+ }
+ jnprAcls.add(acl);
+ }
+ return jnprAcls;
}
/*
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
new file mode 100644
index 0000000..4a72fcb
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailVpcElementImpl.java
@@ -0,0 +1,199 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.cloudstack.network.contrail.management;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+
+import org.apache.cloudstack.network.contrail.model.VirtualNetworkModel;
+import org.apache.cloudstack.network.contrail.model.NetworkPolicyModel;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import com.cloud.deploy.DeployDestination;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.Network.Provider;
+import com.cloud.network.element.NetworkACLServiceProvider;
+import com.cloud.network.element.VpcProvider;
+import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.NetworkACLVO;
+import com.cloud.network.vpc.PrivateGateway;
+import com.cloud.network.vpc.StaticRouteProfile;
+import com.cloud.network.vpc.Vpc;
+import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.vm.ReservationContext;
+
+@Component
+@Local(value = {NetworkACLServiceProvider.class, VpcProvider.class, ContrailElementImpl.class})
+public class ContrailVpcElementImpl extends ContrailElementImpl implements NetworkACLServiceProvider, VpcProvider {
+ private static final Logger s_logger =
+ Logger.getLogger(ContrailElement.class);
+
+ @Inject
+ NetworkACLDao _networkACLDao;
+
+ // NetworkElement API
+ @Override
+ public Provider getProvider() {
+ return Provider.JuniperContrailVpcRouter;
+ }
+
+ @Override
+ public boolean implementVpc(Vpc vpc, DeployDestination dest,
+ ReservationContext context) throws ConcurrentOperationException,
+ ResourceUnavailableException, InsufficientCapacityException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement implementVpc");
+ return true;
+ }
+
+ @Override
+ public boolean shutdownVpc(Vpc vpc, ReservationContext context)
+ throws ConcurrentOperationException, ResourceUnavailableException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement shutdownVpc");
+ return true;
+ }
+
+ @Override
+ public boolean createPrivateGateway(PrivateGateway gateway)
+ throws ConcurrentOperationException, ResourceUnavailableException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement createPrivateGateway");
+ return false;
+ }
+
+ @Override
+ public boolean deletePrivateGateway(PrivateGateway privateGateway)
+ throws ConcurrentOperationException, ResourceUnavailableException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement deletePrivateGateway");
+ return false;
+ }
+
+ @Override
+ public boolean applyStaticRoutes(Vpc vpc, List<StaticRouteProfile> routes)
+ throws ResourceUnavailableException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement applyStaticRoutes");
+ return true;
+ }
+
+ @Override
+ public boolean applyNetworkACLs(Network net,
+ List<? extends NetworkACLItem> rules)
+ throws ResourceUnavailableException {
+ s_logger.debug("NetworkElement applyNetworkACLs");
+ if (rules == null || rules.isEmpty()) {
+ s_logger.debug("no rules to apply");
+ return true;
+ }
+
+ Long aclId = rules.get(0).getAclId();
+ NetworkACLVO acl = _networkACLDao.findById(aclId);
+ NetworkPolicyModel policyModel = _manager.getDatabase().lookupNetworkPolicy(acl.getUuid());
+ if (policyModel == null) {
+ /*
+ * For the first time, when a CS ACL applied to a network, create a network-policy in VNC
+ * and when there are no networks associated to CS ACL, delete it from VNC.
+ */
+ policyModel = new NetworkPolicyModel(acl.getUuid(), acl.getName());
+ net.juniper.contrail.api.types.Project project;
+ try {
+ project = _manager.getVncProject(net.getDomainId(), net.getAccountId());
+ if (project == null) {
+ project = _manager.getDefaultVncProject();
+ }
+ } catch (IOException ex) {
+ s_logger.warn("read project", ex);
+ return false;
+ }
+ policyModel.setProject(project);
+ }
+
+ VirtualNetworkModel vnModel = _manager.getDatabase().lookupVirtualNetwork(net.getUuid(),
+ _manager.getCanonicalName(net), net.getTrafficType());
+ NetworkPolicyModel oldPolicyModel = null;
+ /* this method is called when network is destroyed too, hence vn model might have been deleted already */
+ if (vnModel != null) {
+ oldPolicyModel = vnModel.getNetworkPolicyModel();
+ vnModel.addToNetworkPolicy(policyModel);
+ }
+
+ try {
+ policyModel.build(_manager.getModelController(), rules);
+ } catch (Exception e) {
+ s_logger.error(e);
+ e.printStackTrace();
+ return false;
+ }
+
+ try {
+ if (!policyModel.verify(_manager.getModelController())) {
+ policyModel.update(_manager.getModelController());
+ }
+ _manager.getDatabase().getNetworkPolicys().add(policyModel);
+ } catch (Exception ex) {
+ s_logger.error("network-policy update: ", ex);
+ ex.printStackTrace();
+ return false;
+ }
+
+ if (!policyModel.hasPolicyRules()) {
+ try {
+ policyModel.delete(_manager.getModelController());
+ _manager.getDatabase().getNetworkPolicys().remove(policyModel);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ /*
+ * if no other VNs are associated with the old policy,
+ * we could delete it from the Contrail VNC
+ */
+ if (policyModel != oldPolicyModel && oldPolicyModel != null && !oldPolicyModel.hasDescendents()) {
+ try {
+ oldPolicyModel.delete(_manager.getModelController());
+ _manager.getDatabase().getNetworkPolicys().remove(oldPolicyModel);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean applyACLItemsToPrivateGw(PrivateGateway privateGateway,
+ List<? extends NetworkACLItem> rules)
+ throws ResourceUnavailableException {
+ // TODO Auto-generated method stub
+ s_logger.debug("NetworkElement applyACLItemsToPrivateGw");
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
index b1f4718..b9a3ed3 100644
--- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java
@@ -68,6 +68,8 @@ import com.cloud.network.vpc.NetworkACLItemDao;
import com.cloud.network.vpc.NetworkACLItemVO;
import com.cloud.network.vpc.NetworkACLVO;
import com.cloud.network.vpc.dao.NetworkACLDao;
+import com.cloud.network.vpc.VpcVO;
+import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.projects.ProjectVO;
import com.cloud.projects.dao.ProjectDao;
import com.cloud.vm.NicVO;
@@ -97,6 +99,8 @@ public class ServerDBSyncImpl implements ServerDBSync {
@Inject
ContrailManager _manager;
@Inject
+ VpcDao _vpcDao;
+ @Inject
NetworkACLItemDao _networkACLItemDao;
@Inject
NetworkACLDao _networkACLDao;
@@ -990,7 +994,12 @@ public class ServerDBSyncImpl implements ServerDBSync {
NetworkPolicyModel policyModel = new NetworkPolicyModel(db.getUuid(), db.getName());
net.juniper.contrail.api.types.Project project = null;
try {
- project = _manager.getDefaultVncProject();
+ VpcVO vpc = _vpcDao.findById(db.getVpcId());
+ if (vpc != null) {
+ project = _manager.getVncProject(vpc.getDomainId(), vpc.getAccountId());
+ } else {
+ project = _manager.getDefaultVncProject();
+ }
} catch (IOException ex) {
s_logger.warn("read project", ex);
throw ex;
@@ -1055,7 +1064,12 @@ public class ServerDBSyncImpl implements ServerDBSync {
NetworkPolicyModel policyModel = new NetworkPolicyModel(db.getUuid(), db.getName());
net.juniper.contrail.api.types.Project project = null;
try {
- project = _manager.getDefaultVncProject();
+ VpcVO vpc = _vpcDao.findById(db.getVpcId());
+ if (vpc != null) {
+ project = _manager.getVncProject(vpc.getDomainId(), vpc.getAccountId());
+ } else {
+ project = _manager.getDefaultVncProject();
+ }
} catch (IOException ex) {
s_logger.warn("read project", ex);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
index 8ec2ff7..3092cad 100644
--- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/NetworkPolicyModel.java
@@ -73,7 +73,7 @@ public class NetworkPolicyModel extends ModelObjectBase {
SearchCriteria<NetworkVO> sc = searchBuilder.create();
- sc.setParameters("networkOfferingId", controller.getManager().getRouterOffering().getId());
+ sc.setParameters("networkOfferingId", controller.getManager().getVpcRouterOffering().getId());
sc.setParameters("cidr", cidr);
sc.setParameters("trafficType", Networks.TrafficType.Guest);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 2003716..0109b4b 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -4294,7 +4294,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
public boolean isOfferingForVpc(NetworkOffering offering) {
- boolean vpcProvider = _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.VPCVirtualRouter);
+ boolean vpcProvider = _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.VPCVirtualRouter) ||
+ _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), Provider.JuniperContrailVpcRouter);
+
return vpcProvider;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed3e1b95/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 51e476f..a2521d0 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -203,7 +203,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
private List<VpcProvider> vpcElements = null;
private final List<Service> nonSupportedServices = Arrays.asList(Service.SecurityGroup, Service.Firewall);
- private final List<Provider> supportedProviders = Arrays.asList(Provider.VPCVirtualRouter, Provider.NiciraNvp, Provider.InternalLbVm, Provider.Netscaler);
+ private final List<Provider> supportedProviders = Arrays.asList(Provider.VPCVirtualRouter, Provider.NiciraNvp, Provider.InternalLbVm, Provider.Netscaler, Provider.JuniperContrailVpcRouter);
int _cleanupInterval;
int _maxNetworks;
@@ -308,6 +308,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
// Just here for 4.1, replaced by commit 836ce6c1 in newer versions
Set<Network.Provider> sdnProviders = new HashSet<Network.Provider>();
sdnProviders.add(Provider.NiciraNvp);
+ sdnProviders.add(Provider.JuniperContrailVpcRouter);
boolean sourceNatSvc = false;
boolean firewallSvs = false;
@@ -1191,6 +1192,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
if (vpcElements == null) {
vpcElements = new ArrayList<VpcProvider>();
vpcElements.add((VpcProvider)_ntwkModel.getElementImplementingProvider(Provider.VPCVirtualRouter.getName()));
+ vpcElements.add((VpcProvider)_ntwkModel.getElementImplementingProvider(Provider.JuniperContrailVpcRouter.getName()));
}
if (vpcElements == null) {