create streched L2 networks if the network offering permits streched L2
subnet capability


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

Branch: refs/heads/regionvpc
Commit: edf12ebc1ea18d0f006f82727d4315e183956848
Parents: a36d31a
Author: Murali Reddy <[email protected]>
Authored: Tue Mar 11 19:38:46 2014 +0530
Committer: Murali Reddy <[email protected]>
Committed: Tue Mar 11 19:53:26 2014 +0530

----------------------------------------------------------------------
 api/src/com/cloud/network/Network.java                   |  2 ++
 api/src/org/apache/cloudstack/api/ApiConstants.java      |  1 +
 .../apache/cloudstack/api/response/NetworkResponse.java  |  8 ++++++++
 .../service/NetworkOrchestrationService.java             |  6 +++---
 .../src/com/cloud/network/vpc/VpcManager.java            |  2 +-
 .../engine/orchestration/NetworkOrchestrator.java        | 11 ++++++-----
 engine/schema/src/com/cloud/network/dao/NetworkVO.java   | 11 +++++++++++
 server/src/com/cloud/api/ApiResponseHelper.java          |  1 +
 server/src/com/cloud/network/NetworkServiceImpl.java     |  9 +++++----
 server/src/com/cloud/network/vpc/VpcManagerImpl.java     |  2 +-
 server/test/com/cloud/vpc/MockNetworkManagerImpl.java    |  2 +-
 setup/db/db/schema-430to440.sql                          |  1 +
 12 files changed, 41 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/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 88f23f0..0f5212e 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -338,4 +338,6 @@ public interface Network extends ControlledEntity, 
StateObject<Network.State>, I
     Long getNetworkACLId();
 
     void setNetworkACLId(Long networkACLId);
+
+    boolean isStrechedL2Network();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/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 5f87c73..ae6c5b0 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -589,6 +589,7 @@ public class ApiConstants {
     public static final String SUPPORTS_REGION_LEVEL_VPC = 
"supportsregionLevelvpc";
     public static final String SUPPORTS_STRECHED_L2_SUBNET = 
"supportsstrechedl2subnet";
     public static final String REGION_LEVEL_VPC = "regionlevelvpc";
+    public static final String STRECHED_L2_SUBNET = "strechedl2subnet";
 
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/api/src/org/apache/cloudstack/api/response/NetworkResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java 
b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java
index bf92aa4..197a4ad 100644
--- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java
@@ -216,6 +216,10 @@ public class NetworkResponse extends BaseResponse 
implements ControlledEntityRes
     @Param(description = "ACL Id associated with the VPC network")
     private String aclId;
 
+    @SerializedName(ApiConstants.STRECHED_L2_SUBNET)
+    @Param(description = "true if network can span multiple zones")
+    private Boolean strechedL2Subnet;
+
     public Boolean getDisplayNetwork() {
         return displayNetwork;
     }
@@ -412,4 +416,8 @@ public class NetworkResponse extends BaseResponse 
implements ControlledEntityRes
     public void setAclId(String aclId) {
         this.aclId = aclId;
     }
+
+    public void setStrechedL2Subnet(Boolean strechedL2Subnet) {
+        this.strechedL2Subnet = strechedL2Subnet;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
 
b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
index 1061c4d..75a6f25 100755
--- 
a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
+++ 
b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java
@@ -70,11 +70,11 @@ public interface NetworkOrchestrationService {
     static final ConfigKey<Integer> NetworkThrottlingRate = new 
ConfigKey<Integer>("Network", Integer.class, NetworkThrottlingRateCK, "200",
         "Default data transfer rate in megabits per second allowed in 
network.", true, ConfigKey.Scope.Zone);
 
-    List<? extends Network> setupNetwork(Account owner, NetworkOffering 
offering, DeploymentPlan plan, String name, String displayText, boolean 
isDefault)
+    List<? extends Network> setupNetwork(Account owner, NetworkOffering 
offering, DeploymentPlan plan, String name, String displayText, boolean 
isDefault, boolean strechedL2Subnet)
         throws ConcurrentOperationException;
 
     List<? extends Network> setupNetwork(Account owner, NetworkOffering 
offering, Network predefined, DeploymentPlan plan, String name, String 
displayText,
-        boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean 
subdomainAccess, Long vpcId, Boolean isDisplayNetworkEnabled)
+        boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean 
subdomainAccess, Long vpcId, Boolean isDisplayNetworkEnabled, boolean 
strechedL2Subnet)
         throws ConcurrentOperationException;
 
     void allocate(VirtualMachineProfile vm, LinkedHashMap<? extends Network, 
List<? extends NicProfile>> networks) throws InsufficientCapacityException,
@@ -129,7 +129,7 @@ public interface NetworkOrchestrationService {
 
     Network createGuestNetwork(long networkOfferingId, String name, String 
displayText, String gateway, String cidr, String vlanId, String networkDomain, 
Account owner,
         Long domainId, PhysicalNetwork physicalNetwork, long zoneId, ACLType 
aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr,
-        Boolean displayNetworkEnabled, String isolatedPvlan) throws 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceAllocationException;
+        Boolean displayNetworkEnabled, String isolatedPvlan, boolean 
strechedL2Subnet) throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceAllocationException;
 
     UserDataServiceProvider getPasswordResetProvider(Network network);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/engine/components-api/src/com/cloud/network/vpc/VpcManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/network/vpc/VpcManager.java 
b/engine/components-api/src/com/cloud/network/vpc/VpcManager.java
index 8539871..e244376 100644
--- a/engine/components-api/src/com/cloud/network/vpc/VpcManager.java
+++ b/engine/components-api/src/com/cloud/network/vpc/VpcManager.java
@@ -109,7 +109,7 @@ public interface VpcManager {
     Network
         createVpcGuestNetwork(long ntwkOffId, String name, String displayText, 
String gateway, String cidr, String vlanId, String networkDomain, Account owner,
             Long domainId, PhysicalNetwork pNtwk, long zoneId, ACLType 
aclType, Boolean subdomainAccess, long vpcId, Long aclId, Account caller,
-            Boolean displayNetworkEnabled)
+            Boolean displayNetworkEnabled, boolean strechedL2Subnet)
 
             throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceAllocationException;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 7853c3b..6b52162 100755
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -589,16 +589,16 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
     }
 
     @Override
-    public List<? extends Network> setupNetwork(Account owner, NetworkOffering 
offering, DeploymentPlan plan, String name, String displayText, boolean 
isDefault)
+    public List<? extends Network> setupNetwork(Account owner, NetworkOffering 
offering, DeploymentPlan plan, String name, String displayText, boolean 
isDefault, boolean strechedL2Subnet)
             throws ConcurrentOperationException {
-        return setupNetwork(owner, offering, null, plan, name, displayText, 
false, null, null, null, null, true);
+        return setupNetwork(owner, offering, null, plan, name, displayText, 
false, null, null, null, null, true, strechedL2Subnet);
     }
 
     @Override
     @DB
     public List<? extends Network> setupNetwork(final Account owner, final 
NetworkOffering offering, final Network predefined, final DeploymentPlan plan, 
final String name,
             final String displayText, boolean errorIfAlreadySetup, final Long 
domainId, final ACLType aclType, final Boolean subdomainAccess, final Long 
vpcId,
-            final Boolean isDisplayNetworkEnabled) throws 
ConcurrentOperationException {
+            final Boolean isDisplayNetworkEnabled, final boolean 
strechedL2Subnet) throws ConcurrentOperationException {
 
         Account locked = _accountDao.acquireInLockTable(owner.getId());
         if (locked == null) {
@@ -659,6 +659,7 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                         NetworkVO vo = new NetworkVO(id, network, 
offering.getId(), guru.getName(), owner.getDomainId(), owner.getId(), 
relatedFile, name, displayText, predefined
                                 .getNetworkDomain(), offering.getGuestType(), 
plan.getDataCenterId(), plan.getPhysicalNetworkId(), aclType, 
offering.getSpecifyIpRanges(), vpcId);
                         vo.setDisplayNetwork(isDisplayNetworkEnabled == null ? 
true : isDisplayNetworkEnabled);
+                        vo.setStrechedL2Network(strechedL2Subnet);
                         networks.add(_networksDao.persist(vo, 
vo.getGuestType() == Network.GuestType.Isolated,
                                 
finalizeServicesAndProvidersForNetwork(offering, plan.getPhysicalNetworkId())));
 
@@ -1628,7 +1629,7 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
     @DB
     public Network createGuestNetwork(long networkOfferingId, final String 
name, final String displayText, final String gateway, final String cidr, String 
vlanId,
             String networkDomain, final Account owner, final Long domainId, 
final PhysicalNetwork pNtwk, final long zoneId, final ACLType aclType, Boolean 
subdomainAccess,
-            final Long vpcId, final String ip6Gateway, final String ip6Cidr, 
final Boolean isDisplayNetworkEnabled, final String isolatedPvlan)
+            final Long vpcId, final String ip6Gateway, final String ip6Cidr, 
final Boolean isDisplayNetworkEnabled, final String isolatedPvlan, boolean 
strechedL2Subnet)
             throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceAllocationException {
 
         final NetworkOfferingVO ntwkOff = 
_networkOfferingDao.findById(networkOfferingId);
@@ -1895,7 +1896,7 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
                 }
 
                 List<? extends Network> networks = setupNetwork(owner, 
ntwkOff, userNetwork, plan, name, displayText, true, domainId, aclType, 
subdomainAccessFinal, vpcId,
-                        isDisplayNetworkEnabled);
+                        isDisplayNetworkEnabled, false);
 
                 Network network = null;
                 if (networks == null || networks.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/engine/schema/src/com/cloud/network/dao/NetworkVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkVO.java 
b/engine/schema/src/com/cloud/network/dao/NetworkVO.java
index 13e8dbf..67bbd2e 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkVO.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkVO.java
@@ -167,6 +167,9 @@ public class NetworkVO implements Network {
     @Column(name = "network_acl_id")
     Long networkACLId;
 
+    @Column(name = "streched_l2")
+    boolean strechedL2Network = false;
+
     public NetworkVO() {
         uuid = UUID.randomUUID().toString();
     }
@@ -588,5 +591,13 @@ public class NetworkVO implements Network {
     @Override
     public IAMEntityType getEntityType() {
         return IAMEntityType.Network;
+
+    @Override
+    public boolean isStrechedL2Network() {
+        return strechedL2Network;
+    }
+
+    public void setStrechedL2Network(boolean strechedL2Network) {
+        this.strechedL2Network = strechedL2Network;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/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 c0ddaf3..75d1db8 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -2188,6 +2188,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             }
         }
 
+        response.setStrechedL2Subnet(network.isStrechedL2Network());
         response.setObjectName("network");
         return response;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java 
b/server/src/com/cloud/network/NetworkServiceImpl.java
index ebeb31a..e42f9da 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -1251,7 +1251,7 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService {
 
         Network network = commitNetwork(networkOfferingId, gateway, startIP, 
endIP, netmask, networkDomain, vlanId, name, displayText, caller, 
physicalNetworkId, zoneId, domainId,
                 isDomainSpecific, subdomainAccess, vpcId, startIPv6, endIPv6, 
ip6Gateway, ip6Cidr, displayNetwork, aclId, isolatedPvlan, ntwkOff, pNtwk, 
aclType, owner, cidr,
-                createVlan);
+                createVlan, ntwkOff.getSupportsStrechedL2());
 
         // if the network offering has persistent set to true, implement the 
network
         if (ntwkOff.getIsPersistent()) {
@@ -1284,7 +1284,8 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService {
             final String vlanId, final String name, final String displayText, 
final Account caller, final Long physicalNetworkId, final Long zoneId, final 
Long domainId,
             final boolean isDomainSpecific, final Boolean 
subdomainAccessFinal, final Long vpcId, final String startIPv6, final String 
endIPv6, final String ip6Gateway,
             final String ip6Cidr, final Boolean displayNetwork, final Long 
aclId, final String isolatedPvlan, final NetworkOfferingVO ntwkOff, final 
PhysicalNetwork pNtwk,
-            final ACLType aclType, final Account ownerFinal, final String 
cidr, final boolean createVlan) throws InsufficientCapacityException, 
ResourceAllocationException {
+            final ACLType aclType, final Account ownerFinal, final String 
cidr, final boolean createVlan,
+            final boolean strechedL2Subnet) throws 
InsufficientCapacityException, ResourceAllocationException {
         try {
             return Transaction.execute(new 
TransactionCallbackWithException<Network, Exception>() {
                 @Override
@@ -1329,7 +1330,7 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService {
                             }
                         }
                         network = 
_vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, 
cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId,
-                                aclType, subdomainAccess, vpcId, aclId, 
caller, displayNetwork);
+                                aclType, subdomainAccess, vpcId, aclId, 
caller, displayNetwork, strechedL2Subnet);
                     } else {
                         if (_configMgr.isOfferingForVpc(ntwkOff)) {
                             throw new InvalidParameterValueException("Network 
offering can be used for VPC networks only");
@@ -1339,7 +1340,7 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService {
                         }
 
                         network = 
_networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, 
cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId,
-                                aclType, subdomainAccess, vpcId, ip6Gateway, 
ip6Cidr, displayNetwork, isolatedPvlan);
+                                aclType, subdomainAccess, vpcId, ip6Gateway, 
ip6Cidr, displayNetwork, isolatedPvlan, strechedL2Subnet);
                     }
 
                     if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && 
createVlan) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/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 a45abc2..bddad50 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -2189,7 +2189,7 @@ public class VpcManagerImpl extends ManagerBase 
implements VpcManager, VpcProvis
     @Override
     public Network createVpcGuestNetwork(long ntwkOffId, String name, String 
displayText, String gateway, String cidr, String vlanId, String networkDomain,
         Account owner, Long domainId, PhysicalNetwork pNtwk, long zoneId, 
ACLType aclType, Boolean subdomainAccess, long vpcId, Long aclId, Account 
caller,
-        Boolean isDisplayNetworkEnabled) throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceAllocationException {
+        Boolean isDisplayNetworkEnabled, boolean strechedL2Subnet) throws 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceAllocationException {
 
         Vpc vpc = getActiveVpc(vpcId);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/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 ac303dd..3b38b78 100644
--- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -606,7 +606,7 @@ public class MockNetworkManagerImpl extends ManagerBase 
implements NetworkOrches
     @Override
     public Network createGuestNetwork(long networkOfferingId, String name, 
String displayText, String gateway, String cidr, String vlanId, String 
networkDomain,
         Account owner, Long domainId, PhysicalNetwork physicalNetwork, long 
zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String gatewayv6,
-        String cidrv6, Boolean displayNetworkEnabled, String isolatedPvlan) 
throws ConcurrentOperationException, InsufficientCapacityException,
+        String cidrv6, Boolean displayNetworkEnabled, String isolatedPvlan, 
boolean strechedL2Subnet) throws ConcurrentOperationException, 
InsufficientCapacityException,
         ResourceAllocationException {
         // TODO Auto-generated method stub
         return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/edf12ebc/setup/db/db/schema-430to440.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-430to440.sql b/setup/db/db/schema-430to440.sql
index 4b38468..0b4740e 100644
--- a/setup/db/db/schema-430to440.sql
+++ b/setup/db/db/schema-430to440.sql
@@ -614,3 +614,4 @@ CREATE TABLE `cloud`.`vgpu_types` (
 ALTER TABLE `cloud`.`vpc_offerings` ADD COLUMN supports_region_level_vpc 
boolean default false;
 ALTER TABLE `cloud`.`network_offerings` ADD COLUMN supports_streched_l2 
boolean default false;
 ALTER TABLE `cloud`.`vpc` ADD COLUMN region_level_vpc boolean default false;
+ALTER TABLE `cloud`.`networks` ADD COLUMN streched_l2 boolean default false;

Reply via email to