Updated Branches:
  refs/heads/vpc 46b97cbf7 -> 377b03acd

VPC: when add guest network to VPC, verify that the list of network services is 
within the list of services supported by VPC offering


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

Branch: refs/heads/vpc
Commit: 377b03acdef4037704453652f317aeec2de70541
Parents: 24772bc
Author: Alena Prokharchyk <[email protected]>
Authored: Thu Jun 28 17:13:07 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Thu Jun 28 17:18:27 2012 -0700

----------------------------------------------------------------------
 .../com/cloud/api/commands/ListNetworkACLsCmd.java |    2 +-
 api/src/com/cloud/api/response/VpcResponse.java    |    2 +-
 .../network/vpc/Dao/VpcOfferingServiceMapDao.java  |    3 ++
 .../vpc/Dao/VpcOfferingServiceMapDaoImpl.java      |   16 ++++++++++++++-
 .../src/com/cloud/network/vpc/VpcManagerImpl.java  |   11 ++++++++++
 5 files changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/377b03ac/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java 
b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
index c14f06e..c6e477b 100644
--- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
+++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
@@ -45,7 +45,7 @@ public class ListNetworkACLsCmd extends 
BaseListProjectAndAccountResourcesCmd {
     private Long id;
     
     @IdentityMapper(entityTableName="networks")
-    @Parameter(name=ApiConstants.NETWORK, type=CommandType.LONG, 
description="list network ACLs by network Id")
+    @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, 
description="list network ACLs by network Id")
     private Long networkId;
     
     @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, 
description="list network ACLs by traffic type - Ingress or Egress")

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/377b03ac/api/src/com/cloud/api/response/VpcResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/VpcResponse.java 
b/api/src/com/cloud/api/response/VpcResponse.java
index 84e339d..ae5b33d 100644
--- a/api/src/com/cloud/api/response/VpcResponse.java
+++ b/api/src/com/cloud/api/response/VpcResponse.java
@@ -35,7 +35,7 @@ public class VpcResponse extends BaseResponse implements 
ControlledEntityRespons
     @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="an 
alternate display text of the VPC.")
     private String displayText;
     
-    @SerializedName(ApiConstants.STATE) @Param(description="state of the VPC. 
Can be Disabled/Enabled")
+    @SerializedName(ApiConstants.STATE) @Param(description="state of the VPC. 
Can be Inactive/Enabled")
     private String state;
     
     @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the 
vpc")

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/377b03ac/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java 
b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java
index 74246ae..af89622 100644
--- a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java
+++ b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java
@@ -31,4 +31,7 @@ public interface VpcOfferingServiceMapDao extends 
GenericDao<VpcOfferingServiceM
      * @return
      */
     boolean areServicesSupportedByNetworkOffering(long networkOfferingId, 
Service[] services);
+    
+    List<String> listServicesForVpcOffering(long vpcOfferingId);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/377b03ac/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java 
b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java
index cbbf1d5..9fbc1ff 100644
--- a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java
@@ -18,11 +18,12 @@ import javax.ejb.Local;
 
 import com.cloud.network.Network.Service;
 import com.cloud.network.vpc.VpcOfferingServiceMapVO;
-import com.cloud.offerings.NetworkOfferingServiceMapVO;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Func;
 
 /**
  * @author Alena Prokharchyk
@@ -32,6 +33,7 @@ import com.cloud.utils.db.SearchCriteria;
 public class VpcOfferingServiceMapDaoImpl extends 
GenericDaoBase<VpcOfferingServiceMapVO, Long> implements 
VpcOfferingServiceMapDao{
     final SearchBuilder<VpcOfferingServiceMapVO> AllFieldsSearch;
     final SearchBuilder<VpcOfferingServiceMapVO> MultipleServicesSearch;
+    final GenericSearchBuilder<VpcOfferingServiceMapVO, String> ServicesSearch;
 
     
     protected VpcOfferingServiceMapDaoImpl() {
@@ -48,6 +50,11 @@ public class VpcOfferingServiceMapDaoImpl extends 
GenericDaoBase<VpcOfferingServ
         MultipleServicesSearch.and("service", 
MultipleServicesSearch.entity().getService(), SearchCriteria.Op.IN);
         MultipleServicesSearch.and("provider", 
MultipleServicesSearch.entity().getProvider(), SearchCriteria.Op.EQ);
         MultipleServicesSearch.done();
+        
+        ServicesSearch = createSearchBuilder(String.class);
+        ServicesSearch.and("offeringId", 
ServicesSearch.entity().getVpcOfferingId(), SearchCriteria.Op.EQ);
+        ServicesSearch.select(null, Func.DISTINCT, 
ServicesSearch.entity().getService());
+        ServicesSearch.done();
     }
     
     @Override
@@ -87,4 +94,11 @@ public class VpcOfferingServiceMapDaoImpl extends 
GenericDaoBase<VpcOfferingServ
         
         return false;
     }
+
+    @Override
+    public List<String> listServicesForVpcOffering(long offId) {
+        SearchCriteria<String> sc = ServicesSearch.create();;
+        sc.setParameters("offeringId", offId);
+        return customSearch(sc, null);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/377b03ac/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 14dad60..43b1e2a 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -65,6 +65,7 @@ import com.cloud.network.vpc.Dao.VpcGatewayDao;
 import com.cloud.network.vpc.Dao.VpcOfferingDao;
 import com.cloud.network.vpc.Dao.VpcOfferingServiceMapDao;
 import com.cloud.offering.NetworkOffering;
+import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
 import com.cloud.org.Grouping;
 import com.cloud.projects.Project.ListProjectResourcesCriteria;
 import com.cloud.user.Account;
@@ -126,6 +127,8 @@ public class VpcManagerImpl implements VpcManager, Manager{
     PrivateIpDao _privateIpDao;
     @Inject
     StaticRouteDao _staticRouteDao;
+    @Inject
+    NetworkOfferingServiceMapDao _ntwkOffServiceDao ;
     
     private final ScheduledExecutorService _executor = 
Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
     
@@ -875,6 +878,14 @@ public class VpcManagerImpl implements VpcManager, Manager{
                 throw new InvalidParameterValueException("Only networks with 
conserve mode Off can belong to VPC");
             }
             
+            //9) list supported services should be within VPC supported 
services
+            List<String> ntwkOffServices = 
_ntwkOffServiceDao.listServicesForNetworkOffering(guestNtwkOff.getId());
+            List<String> vpcOffServices = 
_vpcOffSvcMapDao.listServicesForVpcOffering(vpc.getVpcOfferingId());
+            
+            if (!vpcOffServices.containsAll(ntwkOffServices)) {
+                throw new InvalidParameterValueException("VPC doesn't support 
some of the services specified in the network offering");
+            }
+            
         } finally {
             s_logger.debug("Releasing lock for " + locked);
             _vpcDao.releaseFromLockTable(locked.getId());

Reply via email to