Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C533C10965 for ; Thu, 13 Mar 2014 13:54:35 +0000 (UTC) Received: (qmail 81992 invoked by uid 500); 13 Mar 2014 13:53:51 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 81567 invoked by uid 500); 13 Mar 2014 13:53:39 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 78252 invoked by uid 99); 13 Mar 2014 13:52:54 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 13 Mar 2014 13:52:54 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 1991F944146; Thu, 13 Mar 2014 13:52:53 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: muralireddy@apache.org To: commits@cloudstack.apache.org Date: Thu, 13 Mar 2014 13:53:13 -0000 Message-Id: In-Reply-To: <061d0f886bc349f6babdc6ad9d26e14b@git.apache.org> References: <061d0f886bc349f6babdc6ad9d26e14b@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [22/31] git commit: updated refs/heads/distributedrouter to a8d43ba -introduces 'DistributedRouter' as capability to 'Connectivity' service. -create VPC offering to permit 'DistributedRouter' as capability to connectivity service Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/85c9b09c Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/85c9b09c Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/85c9b09c Branch: refs/heads/distributedrouter Commit: 85c9b09cb85b7a8863e8989aa7f0ce5abefc01a7 Parents: 5779292 Author: Murali Reddy Authored: Tue Mar 4 16:42:17 2014 +0530 Committer: Murali Reddy Committed: Thu Mar 13 19:22:06 2014 +0530 ---------------------------------------------------------------------- api/src/com/cloud/network/Network.java | 3 +- api/src/com/cloud/network/vpc/VpcOffering.java | 5 ++ .../network/vpc/VpcProvisioningService.java | 6 +- .../org/apache/cloudstack/api/ApiConstants.java | 1 + .../command/admin/vpc/CreateVPCOfferingCmd.java | 10 +++- .../api/response/VpcOfferingResponse.java | 8 +++ .../com/cloud/network/vpc/VpcOfferingVO.java | 12 +++- .../management/ContrailManagerImpl.java | 2 +- server/src/com/cloud/api/ApiResponseHelper.java | 1 + .../com/cloud/network/vpc/VpcManagerImpl.java | 63 +++++++++++++++++--- setup/db/db/schema-430to440.sql | 1 + 11 files changed, 98 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/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 6dc6752..3283a55 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -57,7 +57,7 @@ public interface Network extends ControlledEntity, StateObject, I public static final Service PortForwarding = new Service("PortForwarding"); public static final Service SecurityGroup = new Service("SecurityGroup"); public static final Service NetworkACL = new Service("NetworkACL", Capability.SupportedProtocols); - public static final Service Connectivity = new Service("Connectivity"); + public static final Service Connectivity = new Service("Connectivity", Capability.DistributedRouter); private final String name; private final Capability[] caps; @@ -186,6 +186,7 @@ public interface Network extends ControlledEntity, StateObject, I public static final Capability SslTermination = new Capability("SslTermination"); public static final Capability LbSchemes = new Capability("LbSchemes"); public static final Capability DhcpAccrossMultipleSubnets = new Capability("DhcpAccrossMultipleSubnets"); + public static final Capability DistributedRouter = new Capability("DistributedRouter"); private final String name; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/api/src/com/cloud/network/vpc/VpcOffering.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/com/cloud/network/vpc/VpcOffering.java index 6e75a2f..a0a1b15 100644 --- a/api/src/com/cloud/network/vpc/VpcOffering.java +++ b/api/src/com/cloud/network/vpc/VpcOffering.java @@ -55,4 +55,9 @@ public interface VpcOffering extends InternalIdentity, Identity { */ Long getServiceOfferingId(); + /** + * + * @return true if the offering provides a distributed router capable of one-hop forwarding + */ + boolean supportsDistributedRouter(); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/api/src/com/cloud/network/vpc/VpcProvisioningService.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/vpc/VpcProvisioningService.java b/api/src/com/cloud/network/vpc/VpcProvisioningService.java index 174b71f..e545275 100644 --- a/api/src/com/cloud/network/vpc/VpcProvisioningService.java +++ b/api/src/com/cloud/network/vpc/VpcProvisioningService.java @@ -23,8 +23,10 @@ public interface VpcProvisioningService { public VpcOffering getVpcOffering(long vpcOfferingId); - public VpcOffering createVpcOffering(String name, String displayText, List supportedServices, Map> serviceProviders, - Long serviceOfferingId); + public VpcOffering createVpcOffering(String name, String displayText, List supportedServices, + Map> serviceProviders, + Map serviceCapabilitystList, + Long serviceOfferingId); List listVpcOfferings(Long id, String name, String displayText, List supportedServicesStr, Boolean isDefault, String keyword, String state, Long startIndex, Long pageSizeVal); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/api/src/org/apache/cloudstack/api/ApiConstants.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index 089affb..643a374 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -588,6 +588,7 @@ public class ApiConstants { public static final String VGPU = "vgpu"; public static final String VGPUTYPE = "vgputype"; public static final String REMAININGCAPACITY = "remainingcapacity"; + public static final String DISTRIBUTED_VPC_ROUTER = "distributedvpcrouter"; public enum HostDetails { all, capacity, events, stats, min; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 6b2c4ba..5b3090b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -66,6 +66,9 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { + "If not specified, the provider for the service will be mapped to the default provider on the physical network") private Map serviceProviderList; + @Parameter(name = ApiConstants.SERVICE_CAPABILITY_LIST, type = CommandType.MAP, description = "desired service capabilities as part of vpc offering") + private Map serviceCapabilitystList; + @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = ServiceOfferingResponse.class, @@ -112,13 +115,18 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { return serviceProviderMap; } + public Map> getServiceCapabilitystList() { + return serviceCapabilitystList; + } + public Long getServiceOfferingId() { return serviceOfferingId; } @Override public void create() throws ResourceAllocationException { - VpcOffering vpcOff = _vpcProvSvc.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices(), getServiceProviders(), getServiceOfferingId()); + VpcOffering vpcOff = _vpcProvSvc.createVpcOffering(getVpcOfferingName(), getDisplayText(), + getSupportedServices(), getServiceProviders(), getServiceCapabilitystList(), getServiceOfferingId()); if (vpcOff != null) { setEntityId(vpcOff.getId()); setEntityUuid(vpcOff.getUuid()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java index 17e4dfd..89697f0 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java @@ -59,6 +59,10 @@ public class VpcOfferingResponse extends BaseResponse { @Param(description = "the list of supported services", responseObject = ServiceResponse.class) private List services; + @SerializedName(ApiConstants.DISTRIBUTED_VPC_ROUTER) + @Param(description = " indicates if the vpc offering supports distributed router for one-hop forwarding") + private Boolean supportsDistributedRouter; + public void setId(String id) { this.id = id; } @@ -86,4 +90,8 @@ public class VpcOfferingResponse extends BaseResponse { public void setState(String state) { this.state = state; } + + public void setSupportsDistributedRouter(Boolean supportsDistributedRouter) { + this.supportsDistributedRouter = supportsDistributedRouter; + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java b/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java index 3a676e6..53f6f60 100644 --- a/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java +++ b/engine/schema/src/com/cloud/network/vpc/VpcOfferingVO.java @@ -67,6 +67,9 @@ public class VpcOfferingVO implements VpcOffering { @Column(name = "service_offering_id") Long serviceOfferingId; + @Column(name = "supports_distributed_router") + boolean supportsDistributedRouter=false; + public VpcOfferingVO() { this.uuid = UUID.randomUUID().toString(); } @@ -80,9 +83,11 @@ public class VpcOfferingVO implements VpcOffering { this.state = State.Disabled; } - public VpcOfferingVO(String name, String displayText, boolean isDefault, Long serviceOfferingId) { + public VpcOfferingVO(String name, String displayText, boolean isDefault, Long serviceOfferingId, + boolean supportsDistributedRouter) { this(name, displayText, serviceOfferingId); this.isDefault = isDefault; + this.supportsDistributedRouter = supportsDistributedRouter; } @Override @@ -145,4 +150,9 @@ public class VpcOfferingVO implements VpcOffering { public Long getServiceOfferingId() { return serviceOfferingId; } + + @Override + public boolean supportsDistributedRouter() { + return supportsDistributedRouter; + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/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 01be7db..bf083fd 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 @@ -281,7 +281,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager for (String svc: services) { serviceProviderMap.put(svc, providerSet); } - vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null); + vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null); ((VpcOfferingVO)vpcOffer).setState(VpcOffering.State.Enabled); long id = vpcOffer.getId(); _vpcOffDao.update(id, (VpcOfferingVO)vpcOffer); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/server/src/com/cloud/api/ApiResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index a2cc352..5f1320d 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2754,6 +2754,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setDisplayText(offering.getDisplayText()); response.setIsDefault(offering.isDefault()); response.setState(offering.getState().name()); + response.setSupportsDistributedRouter(offering.supportsDistributedRouter()); Map> serviceProviderMap = ApiDBUtils.listVpcOffServices(offering.getId()); List serviceResponses = new ArrayList(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/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 fe49981..ac82041 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -18,8 +18,10 @@ package com.cloud.network.vpc; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -231,7 +233,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis svcProviderMap.put(svc, defaultProviders); } } - createVpcOffering(VpcOffering.defaultVPCOfferingName, VpcOffering.defaultVPCOfferingName, svcProviderMap, true, State.Enabled, null); + createVpcOffering(VpcOffering.defaultVPCOfferingName, VpcOffering.defaultVPCOfferingName, svcProviderMap, true, State.Enabled, null, false); } //configure default vpc offering with Netscaler as LB Provider @@ -250,7 +252,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis svcProviderMap.put(svc, defaultProviders); } } - createVpcOffering(VpcOffering.defaultVPCNSOfferingName, VpcOffering.defaultVPCNSOfferingName, svcProviderMap, false, State.Enabled, null); + createVpcOffering(VpcOffering.defaultVPCNSOfferingName, VpcOffering.defaultVPCNSOfferingName, svcProviderMap, false, State.Enabled, null, false); } } }); @@ -299,8 +301,10 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis @Override @ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_CREATE, eventDescription = "creating vpc offering", create = true) - public VpcOffering createVpcOffering(String name, String displayText, List supportedServices, Map> serviceProviders, - Long serviceOfferingId) { + public VpcOffering createVpcOffering(String name, String displayText, List supportedServices, + Map> serviceProviders, + Map serviceCapabilitystList, + Long serviceOfferingId) { Map> svcProviderMap = new HashMap>(); Set defaultProviders = new HashSet(); defaultProviders.add(Provider.VPCVirtualRouter); @@ -372,20 +376,25 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } } - VpcOffering offering = createVpcOffering(name, displayText, svcProviderMap, false, null, serviceOfferingId); + boolean supportsDistributedRouter = isVpcOfferingSupportsDistributedRouter(serviceCapabilitystList); + + VpcOffering offering = createVpcOffering(name, displayText, svcProviderMap, false, null, + serviceOfferingId,supportsDistributedRouter); CallContext.current().setEventDetails(" Id: " + offering.getId() + " Name: " + name); return offering; } @DB - protected VpcOffering createVpcOffering(final String name, final String displayText, final Map> svcProviderMap, - final boolean isDefault, final State state, final Long serviceOfferingId) { + protected VpcOffering createVpcOffering(final String name, final String displayText, + final Map> svcProviderMap, + final boolean isDefault, final State state, final Long serviceOfferingId, + final boolean supportsDistributedRouter) { return Transaction.execute(new TransactionCallback() { @Override public VpcOffering doInTransaction(TransactionStatus status) { // create vpc offering object - VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId); + VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId, supportsDistributedRouter); if (state != null) { offering.setState(state); @@ -413,6 +422,44 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis }); } + private boolean isVpcOfferingSupportsDistributedRouter(Map serviceCapabilitystList) { + boolean supportsDistributedRouter = false; + if (serviceCapabilitystList != null && !serviceCapabilitystList.isEmpty()) { + Collection serviceCapabilityCollection = serviceCapabilitystList.values(); + Iterator iter = serviceCapabilityCollection.iterator(); + Map capabilityMap = null; + + while (iter.hasNext()) { + HashMap svcCapabilityMap = (HashMap)iter.next(); + Network.Capability capability = null; + String svc = svcCapabilityMap.get("service"); + String capabilityName = svcCapabilityMap.get("capabilitytype"); + String capabilityValue = svcCapabilityMap.get("capabilityvalue"); + if (capabilityName != null) { + capability = Network.Capability.getCapability(capabilityName); + } + + if ((capability == null) || (capabilityName == null) || (capabilityValue == null)) { + throw new InvalidParameterValueException("Invalid capability:" + capabilityName + " capability value:" + capabilityValue); + } + + if (!svc.equalsIgnoreCase(Service.Connectivity.getName())) { + throw new InvalidParameterValueException("Invalid Service:" + svc + " specified. Only for 'Connectivity' service capabilities can be specified"); + } + + if (!capabilityName.equalsIgnoreCase("DistributedRouter")) { + throw new InvalidParameterValueException("Invalid Capability:" + capabilityName + " specified. Only 'DistributedRouter' capability can be specified."); + } + + if (!capabilityValue.equalsIgnoreCase("true") && capabilityValue.equalsIgnoreCase("false")) { + throw new InvalidParameterValueException("Invalid Capability value:" + capabilityValue + " specified."); + } + supportsDistributedRouter = capabilityValue.equalsIgnoreCase("true"); + } + } + return supportsDistributedRouter; + } + @Override public Vpc getActiveVpc(long vpcId) { return _vpcDao.getActiveVpcById(vpcId); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/85c9b09c/setup/db/db/schema-430to440.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-430to440.sql b/setup/db/db/schema-430to440.sql index ab6bc98..17c255a 100644 --- a/setup/db/db/schema-430to440.sql +++ b/setup/db/db/schema-430to440.sql @@ -621,3 +621,4 @@ UPDATE `cloud`.`guest_os_hypervisor` SET `created` = now(); ALTER TABLE `cloud`.`guest_os` ADD COLUMN `created` datetime COMMENT 'Time when Guest OS was created in system'; ALTER TABLE `cloud`.`guest_os` ADD COLUMN `removed` datetime COMMENT 'Time when Guest OS was removed if deleted, else NULL'; UPDATE `cloud`.`guest_os` SET `created` = now(); +ALTER TABLE `cloud`.`vpc_offerings` ADD COLUMN supports_distributed_router boolean default false;