From 9f6d03b87bc16b34c49bb880c0ae228e9b06c071 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 3 Jul 2012 15:37:07 -0700 Subject: [PATCH] VPC: added "forVpc" parameter to listNetworkOfferings command. If true, the offeirng can be used for vpc networks only --- api/src/com/cloud/api/ApiConstants.java | 3 +-- .../api/commands/ListNetworkOfferingsCmd.java | 8 ++++++++ .../api/response/NetworkOfferingResponse.java | 7 +++++++ .../cloud/configuration/ConfigurationService.java | 7 ++++++- server/src/com/cloud/api/ApiDBUtils.java | 6 ++++++ server/src/com/cloud/api/ApiResponseHelper.java | 2 ++ .../configuration/ConfigurationManagerImpl.java | 15 ++++++++++++++- .../src/com/cloud/network/NetworkManagerImpl.java | 6 ++++++ 8 files changed, 50 insertions(+), 4 deletions(-) diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index 588a8d0bf69..1f11d49cee7 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -361,8 +361,6 @@ public class ApiConstants { public static final String VPC_ID = "vpcid"; public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy"; public static final String GATEWAY_ID = "gatewayid"; - - public static final String S2S_VPN_GATEWAY_ID = "s2svpngatewayid"; public static final String S2S_CUSTOMER_GATEWAY_ID = "s2scustomergatewayid"; public static final String IPSEC_PSK = "ipsecpsk"; @@ -371,6 +369,7 @@ public class ApiConstants { public static final String IKE_POLICY = "ikepolicy"; public static final String ESP_POLICY = "esppolicy"; public static final String LIFETIME = "lifetime"; + public static final String FOR_VPC = "forvpc"; public enum HostDetails { all, capacity, events, stats, min; diff --git a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java index bf4d8f7da9f..8e19ad3d84d 100644 --- a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java @@ -86,6 +86,10 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { @Parameter(name=ApiConstants.IS_TAGGED, type=CommandType.BOOLEAN, description="true if offering has tags specified") private Boolean isTagged; + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="the network offering can be used" + + " only for network creation inside the VPC") + private Boolean forVpc; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -154,6 +158,10 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { return isTagged; } + public Boolean getForVpc() { + return forVpc; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/response/NetworkOfferingResponse.java b/api/src/com/cloud/api/response/NetworkOfferingResponse.java index c91bd0b1354..ee3001faf51 100644 --- a/api/src/com/cloud/api/response/NetworkOfferingResponse.java +++ b/api/src/com/cloud/api/response/NetworkOfferingResponse.java @@ -70,6 +70,9 @@ public class NetworkOfferingResponse extends BaseResponse{ @SerializedName(ApiConstants.SERVICE) @Param(description="the list of supported services", responseObject = ServiceResponse.class) private List services; + @SerializedName(ApiConstants.FOR_VPC) @Param(description="true if network offering can be used by VPC networks only") + private Boolean forVpc; + public void setId(Long id) { this.id.setValue(id); @@ -138,4 +141,8 @@ public class NetworkOfferingResponse extends BaseResponse{ public void setSpecifyIpRanges(Boolean specifyIpRanges) { this.specifyIpRanges = specifyIpRanges; } + + public void setForVpc(Boolean forVpc) { + this.forVpc = forVpc; + } } diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 9d84338bff7..55a8ad0c87b 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -30,7 +30,6 @@ import com.cloud.api.commands.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import com.cloud.api.commands.ListNetworkOfferingsCmd; -import com.cloud.api.commands.MarkDefaultZoneForAccountCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdateNetworkOfferingCmd; @@ -259,4 +258,10 @@ public interface ConfigurationService { boolean updateLDAP(LDAPConfigCmd cmd) throws NamingException; boolean removeLDAP(LDAPRemoveCmd cmd); + + /** + * @param offering + * @return + */ + boolean isOfferingForVpc(NetworkOffering offering); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index d57be217758..851d66431fa 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -74,6 +74,7 @@ import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.vpc.VpcManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -793,4 +794,9 @@ public class ApiDBUtils { public static List listByResourceTypeAndId(TaggedResourceType type, long resourceId) { return _taggedResourceService.listByResourceTypeAndId(type, resourceId); } + + public static boolean isOfferingForVpc(NetworkOffering offering) { + boolean vpcProvider = _configMgr.isOfferingForVpc(offering); + return vpcProvider; + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 550b89e8d13..e4b93062e00 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2886,6 +2886,8 @@ public class ApiResponseHelper implements ResponseGenerator { serviceResponses.add(svcRsp); } + response.setForVpc(ApiDBUtils.isOfferingForVpc(offering)); + response.setServices(serviceResponses); response.setObjectName("networkoffering"); return response; diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 7f4256fe6b2..d13afef5712 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3283,6 +3283,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Object specifyIpRanges = cmd.getSpecifyIpRanges(); String tags = cmd.getTags(); Boolean isTagged = cmd.isTagged(); + Boolean forVpc = cmd.getForVpc(); if (zoneId != null) { zone = getZone(zoneId); @@ -3410,7 +3411,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura // filter by supported services boolean listBySupportedServices = (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !offerings.isEmpty()); boolean checkIfProvidersAreEnabled = (zoneId != null); - boolean parseOfferings = (listBySupportedServices || sourceNatSupported != null || checkIfProvidersAreEnabled); + boolean parseOfferings = (listBySupportedServices || sourceNatSupported != null || checkIfProvidersAreEnabled + || forVpc != null); if (parseOfferings) { List supportedOfferings = new ArrayList(); @@ -3457,6 +3459,10 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (sourceNatSupported != null) { addOffering = addOffering && (_networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.SourceNat) == sourceNatSupported); } + + if (forVpc != null) { + addOffering = addOffering && (isOfferingForVpc(offering) == forVpc.booleanValue()); + } if (addOffering) { supportedOfferings.add(offering); @@ -3470,6 +3476,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } } + @Override + public boolean isOfferingForVpc(NetworkOffering offering) { + boolean vpcProvider = _ntwkOffServiceMapDao.isProviderForNetworkOffering(offering.getId(), + Provider.VPCVirtualRouter); + return vpcProvider; + } + @Override @ActionEvent(eventType = EventTypes.EVENT_NETWORK_OFFERING_DELETE, eventDescription = "deleting network offering") public boolean deleteNetworkOffering(DeleteNetworkOfferingCmd cmd) { diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 79beb61ee40..5062dec058d 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2808,9 +2808,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag //Create guest network Network network = null; if (vpcId != null) { + if (!_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); + } network = createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); } else { + if (_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); + } network = createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); }