diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java index c14f06ecb0e..c6e477b9428 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") diff --git a/api/src/com/cloud/api/response/VpcResponse.java b/api/src/com/cloud/api/response/VpcResponse.java index 84e339d776a..ae5b33d7043 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") diff --git a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDao.java index 74246aef67e..af896220da9 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 listServicesForVpcOffering(long vpcOfferingId); + } diff --git a/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java b/server/src/com/cloud/network/vpc/Dao/VpcOfferingServiceMapDaoImpl.java index cbbf1d5e43e..9fbc1fff556 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 implements VpcOfferingServiceMapDao{ final SearchBuilder AllFieldsSearch; final SearchBuilder MultipleServicesSearch; + final GenericSearchBuilder ServicesSearch; protected VpcOfferingServiceMapDaoImpl() { @@ -48,6 +50,11 @@ public class VpcOfferingServiceMapDaoImpl extends GenericDaoBase listServicesForVpcOffering(long offId) { + SearchCriteria sc = ServicesSearch.create();; + sc.setParameters("offeringId", offId); + return customSearch(sc, null); + } } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 14dad600780..43b1e2a984f 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 ntwkOffServices = _ntwkOffServiceDao.listServicesForNetworkOffering(guestNtwkOff.getId()); + List 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());