You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/08/13 23:22:36 UTC

git commit: VPC: CS-15925 - when vpc provider is speficied for a new network offering, no other providers can be used

Updated Branches:
  refs/heads/master dabb82792 -> 71ead9ef4


VPC: CS-15925 - when vpc provider is speficied for a new network offering, no other providers can be used

Conflicts:

	server/src/com/cloud/network/NetworkManagerImpl.java
	server/src/com/cloud/network/vpc/VpcManagerImpl.java
	server/test/com/cloud/network/MockNetworkManagerImpl.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/71ead9ef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/71ead9ef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/71ead9ef

Branch: refs/heads/master
Commit: 71ead9ef4e5a81908682456eabef58775fca6767
Parents: dabb827
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Mon Aug 13 13:57:29 2012 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Mon Aug 13 14:03:39 2012 -0700

----------------------------------------------------------------------
 .../configuration/ConfigurationManagerImpl.java    |   13 +++
 server/src/com/cloud/network/NetworkManager.java   |    4 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |    4 +-
 server/src/com/cloud/network/vpc/VpcManager.java   |    9 ++
 .../src/com/cloud/network/vpc/VpcManagerImpl.java  |   60 +++++++++-----
 .../com/cloud/network/MockNetworkManagerImpl.java  |   19 +++--
 .../test/com/cloud/vpc/MockNetworkManagerImpl.java |    2 +-
 7 files changed, 75 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/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 3b07707..f9da08d 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -120,6 +120,7 @@ import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
 import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
+import com.cloud.network.vpc.VpcManager;
 import com.cloud.offering.DiskOffering;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offering.NetworkOffering.Availability;
@@ -230,6 +231,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
     NicDao _nicDao;
     @Inject
     FirewallRulesDao _firewallDao;
+    @Inject
+    VpcManager _vpcMgr;
 
     // FIXME - why don't we have interface for DataCenterLinkLocalIpAddressDao?
     protected static final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class);
@@ -3247,11 +3250,21 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
             for (Network.Service service : serviceProviderMap.keySet()) {
                 Set<Provider> providers = serviceProviderMap.get(service);
                 if (providers != null && !providers.isEmpty()) {
+                    boolean vpcOff = false;
                     for (Network.Provider provider : providers) {
+                        if (provider == Provider.VPCVirtualRouter) {
+                            vpcOff = true;
+                        }
                         NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, provider);
                         _ntwkOffServiceMapDao.persist(offService);
                         s_logger.trace("Added service for the network offering: " + offService + " with provider " + provider.getName());
                     }
+                    
+                    if (vpcOff) {
+                        List<Service> supportedSvcs = new ArrayList<Service>();
+                        supportedSvcs.addAll(serviceProviderMap.keySet());
+                        _vpcMgr.validateNtwkOffForVpc(offering, supportedSvcs);
+                    }
                 } else {
                     NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, null);
                     _ntwkOffServiceMapDao.persist(offService);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/server/src/com/cloud/network/NetworkManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java
index 7f06d91..1f803af 100755
--- a/server/src/com/cloud/network/NetworkManager.java
+++ b/server/src/com/cloud/network/NetworkManager.java
@@ -331,10 +331,10 @@ public interface NetworkManager extends NetworkService {
 
 
     /**
-     * @param networkId
+     * @param ntwkOffId
      * @return
      */
-    List<Provider> getNtwkOffDistinctProviders(long networkId);
+    List<Provider> getNtwkOffDistinctProviders(long ntwkOffId);
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index d382e92..d089752 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -7126,8 +7126,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
     }
     
     @Override
-    public List<Provider> getNtwkOffDistinctProviders(long networkId) {
-        List<String> providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(networkId);
+    public List<Provider> getNtwkOffDistinctProviders(long ntkwOffId) {
+        List<String> providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId);
         List<Provider> providers = new ArrayList<Provider>();
         for (String providerName : providerNames) {
             providers.add(Network.Provider.getProvider(providerName));

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/server/src/com/cloud/network/vpc/VpcManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java
index c3bae6f..553891c 100644
--- a/server/src/com/cloud/network/vpc/VpcManager.java
+++ b/server/src/com/cloud/network/vpc/VpcManager.java
@@ -26,8 +26,10 @@ import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.IpAddress;
 import com.cloud.network.Network;
+import com.cloud.network.Network.Service;
 import com.cloud.network.PhysicalNetwork;
 import com.cloud.network.addr.PublicIp;
+import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
 import com.cloud.vm.DomainRouterVO;
 
@@ -127,4 +129,11 @@ public interface VpcManager extends VpcService{
      */
     PublicIp assignSourceNatIpAddressToVpc(Account owner, Vpc vpc) throws InsufficientAddressCapacityException, ConcurrentOperationException;
 
+
+    /**
+     * @param guestNtwkOff
+     * @param supportedSvcs TODO
+     */
+    void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List<Service> supportedSvcs);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/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 0612e65..3d6f930 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -961,27 +961,12 @@ public class VpcManagerImpl implements VpcManager, Manager{
             //1) Validate attributes that has to be passed in when create new guest network
             validateNewVpcGuestNetwork(cidr, gateway, networkOwner, vpc, networkDomain); 
         }
-        
-        //2) Only Isolated networks with Source nat service enabled can be added to vpc
-        if (!(guestNtwkOff.getGuestType() == GuestType.Isolated 
-                && _ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.SourceNat))) {
-            
-            throw new InvalidParameterValueException("Only networks of type " + GuestType.Isolated + " with service "
-            + Service.SourceNat + " can be added as a part of VPC");
 
-        }
-        
-        //3) No redundant router support
-        if (guestNtwkOff.getRedundantRouter()) {
-            throw new InvalidParameterValueException("No redunant router support when network belnogs to VPC");
-        }
-        
-        //4) Conserve mode should be off
-        if (guestNtwkOff.isConserveMode()) {
-            throw new InvalidParameterValueException("Only networks with conserve mode Off can belong to VPC");
-        }
-        
-        //5) Check services/providers against VPC providers
+        //2) validate network offering attributes
+        List<Service> svcs = _ntwkMgr.listNetworkOfferingServices(guestNtwkOff.getId());
+        validateNtwkOffForVpc(guestNtwkOff, svcs);
+
+        //3) Check services/providers against VPC providers
         List<NetworkOfferingServiceMapVO> networkProviders = _ntwkOffServiceDao.listByNetworkOfferingId(guestNtwkOff.getId());
         
         for (NetworkOfferingServiceMapVO nSvcVO : networkProviders) {
@@ -992,8 +977,8 @@ public class VpcManagerImpl implements VpcManager, Manager{
                         pr + " is not supported by VPC " + vpc);
             }
         }
-        
-        //6) Only one network in the VPC can support LB
+
+        //4) Only one network in the VPC can support LB
         if (_ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) {
             List<? extends Network> networks = getVpcNetworks(vpc.getId());
             for (Network network : networks) {
@@ -1010,6 +995,37 @@ public class VpcManagerImpl implements VpcManager, Manager{
         }
     }
 
+    @Override
+    public void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List<Service> supportedSvcs) {
+        //1) in current release, only vpc provider is supported by Vpc offering
+        List<Provider> providers = _ntwkMgr.getNtwkOffDistinctProviders(guestNtwkOff.getId());
+        for (Provider provider : providers) {
+            if (provider != Provider.VPCVirtualRouter) {
+                throw new InvalidParameterValueException("Only provider of type " + Provider.VPCVirtualRouter.getName() 
+                        + " is supported for network offering that can be used in VPC");
+            }
+        }
+        
+        //2) Only Isolated networks with Source nat service enabled can be added to vpc
+        if (!(guestNtwkOff.getGuestType() == GuestType.Isolated 
+                && supportedSvcs.contains(Service.SourceNat))) {
+
+            throw new InvalidParameterValueException("Only network offerings of type " + GuestType.Isolated + " with service "
+                    + Service.SourceNat.getName() +
+                    " are valid for vpc ");
+        }
+
+        //3) No redundant router support
+        if (guestNtwkOff.getRedundantRouter()) {
+            throw new InvalidParameterValueException("No redunant router support when network belnogs to VPC");
+        }
+
+        //4) Conserve mode should be off
+        if (guestNtwkOff.isConserveMode()) {
+            throw new InvalidParameterValueException("Only networks with conserve mode Off can belong to VPC");
+        }
+    }
+
     @DB
     protected void validateNewVpcGuestNetwork(String cidr, String gateway, Account networkOwner, Vpc vpc, String networkDomain) {
         

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index 78b840e..06104c5 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -764,14 +764,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long)
-     */
-    @Override
-    public List<Provider> getNtwkOffDistinctProviders(long networkId) {
-        // TODO Auto-generated method stub
-        return null;
-    }
 
     /* (non-Javadoc)
      * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile)
@@ -888,7 +880,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
      * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String)
      */
     @Override
-    public Provider getDefaultUniqueProviderForService(String serviceName) {
+    public List<Provider> getNtwkOffDistinctProviders(long ntwkOffId) {
         // TODO Auto-generated method stub
         return null;
     }
@@ -1136,4 +1128,13 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
         // TODO Auto-generated method stub
         return null;
     }
+
+    /* (non-Javadoc)
+     * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String)
+     */
+    @Override
+    public Provider getDefaultUniqueProviderForService(String serviceName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/71ead9ef/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
index f6ad27b..2dc2c16 100644
--- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -1294,7 +1294,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{
      * @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long)
      */
     @Override
-    public List<Provider> getNtwkOffDistinctProviders(long networkId) {
+    public List<Provider> getNtwkOffDistinctProviders(long ntwkOffId) {
         // TODO Auto-generated method stub
         return null;
     }