make zone id optional parameter in createVpc, zone id can be null only if vpc offfering supports region level VPC
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c0575aa0 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c0575aa0 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c0575aa0 Branch: refs/heads/regionvpc Commit: c0575aa02aa86797aa9e4cafa680915594dc5749 Parents: f29b73d Author: Murali Reddy <[email protected]> Authored: Mon Jan 27 14:41:02 2014 +0530 Committer: Murali Reddy <[email protected]> Committed: Tue Mar 11 19:51:08 2014 +0530 ---------------------------------------------------------------------- api/src/com/cloud/network/vpc/Vpc.java | 6 ++++++ api/src/org/apache/cloudstack/api/ApiConstants.java | 1 + .../api/command/user/vpc/CreateVPCCmd.java | 2 +- .../apache/cloudstack/api/response/VpcResponse.java | 9 +++++++++ engine/schema/src/com/cloud/network/vpc/VpcVO.java | 13 +++++++++++-- server/src/com/cloud/api/ApiResponseHelper.java | 1 + server/src/com/cloud/network/vpc/VpcManagerImpl.java | 15 ++++++++++++--- server/test/com/cloud/vpc/VpcApiUnitTest.java | 2 +- server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java | 4 ++-- setup/db/db/schema-430to440.sql | 1 + 10 files changed, 45 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/api/src/com/cloud/network/vpc/Vpc.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java index eb7e391..000acef 100644 --- a/api/src/com/cloud/network/vpc/Vpc.java +++ b/api/src/com/cloud/network/vpc/Vpc.java @@ -73,4 +73,10 @@ public interface Vpc extends ControlledEntity, Identity, InternalIdentity { boolean isRestartRequired(); boolean isDisplay(); + + /** + * + * @return true if VPC spans multiple zones in the region + */ + boolean isRegionLevelVpc(); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/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 6b8352f..5f87c73 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 REMAININGCAPACITY = "remainingcapacity"; 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 enum HostDetails { all, capacity, events, stats, min; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index a632b6d..1eca1d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -62,7 +62,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd { private Long projectId; @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, - required = true, description = "the ID of the availability zone") + description = "the ID of the availability zone") private Long zoneId; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the VPC") http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/api/src/org/apache/cloudstack/api/response/VpcResponse.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java index eeafb40..0b0a559 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -111,6 +111,10 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons @Param(description = "is vpc for display to the regular user", since = "4.4", authorized = {RoleType.Admin}) private Boolean forDisplay; + @SerializedName((ApiConstants.REGION_LEVEL_VPC)) + @Param(description = "true if VPC is region level") + private Boolean regionLevelVpc; + public void setId(String id) { this.id = id; } @@ -196,7 +200,12 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons this.tags = tags; } +<<<<<<< HEAD public void setForDisplay(Boolean forDisplay) { this.forDisplay = forDisplay; +======= + public void setRegionLevelVpc(Boolean regionLevelVpc) { + this.regionLevelVpc = regionLevelVpc; +>>>>>>> make zone id optional parameter in createVpc, zone id can be null only } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/engine/schema/src/com/cloud/network/vpc/VpcVO.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/vpc/VpcVO.java b/engine/schema/src/com/cloud/network/vpc/VpcVO.java index d1cfd7c..b7da6f1 100644 --- a/engine/schema/src/com/cloud/network/vpc/VpcVO.java +++ b/engine/schema/src/com/cloud/network/vpc/VpcVO.java @@ -48,7 +48,7 @@ public class VpcVO implements Vpc { String displayText; @Column(name = "zone_id") - long zoneId; + Long zoneId; @Column(name = "cidr") private String cidr = null; @@ -81,11 +81,15 @@ public class VpcVO implements Vpc { @Column(name = "display", updatable = true, nullable = false) protected boolean display = true; + @Column(name = "region_level_vpc") + boolean regionLevelVpc = false; + public VpcVO() { uuid = UUID.randomUUID().toString(); } - public VpcVO(long zoneId, String name, String displayText, long accountId, long domainId, long vpcOffId, String cidr, String networkDomain) { + public VpcVO(Long zoneId, String name, String displayText, long accountId, long domainId, long vpcOffId, + String cidr, String networkDomain, boolean regionLevelVpc) { this.zoneId = zoneId; this.name = name; this.displayText = displayText; @@ -96,6 +100,7 @@ public class VpcVO implements Vpc { state = State.Enabled; this.networkDomain = networkDomain; vpcOfferingId = vpcOffId; + this.regionLevelVpc = regionLevelVpc; } @Override @@ -186,6 +191,10 @@ public class VpcVO implements Vpc { public void setUuid(String uuid) { this.uuid = uuid; + + @Override + public boolean isRegionLevelVpc() { + return regionLevelVpc; } public void setDisplay(boolean display) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/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 875034b..c0ddaf3 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2791,6 +2791,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setRestartRequired(vpc.isRestartRequired()); response.setNetworkDomain(vpc.getNetworkDomain()); response.setForDisplay(vpc.isDisplay()); + response.setRegionLevelVpc(vpc.isRegionLevelVpc()); Map<Service, Set<Provider>> serviceProviderMap = ApiDBUtils.listVpcOffServices(vpc.getVpcOfferingId()); List<ServiceResponse> serviceResponses = new ArrayList<ServiceResponse>(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/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 881a876..7a21c13 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -705,6 +705,15 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis throw ex; } + boolean isRegionLevelVpcOff = vpcOff.offersRegionLevelVPC(); + if (zoneId == null && !isRegionLevelVpcOff) { + throw new InvalidParameterValueException("VPC Offering does not support region level VPC. So specify zone id in which VPC is to be created"); + } + + if (isRegionLevelVpcOff && networkDomain == null) { + throw new InvalidParameterValueException("Network domain must be specified for region level VPC"); + } + //Validate zone DataCenter zone = _entityMgr.findById(DataCenter.class, zoneId); if (zone == null) { @@ -728,12 +737,12 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } } - return createVpc(zoneId, vpcOffId, owner, vpcName, displayText, cidr, networkDomain, displayVpc); + return createVpc(zoneId, vpcOffId, owner, vpcName, displayText, cidr, networkDomain, displayVpc, regionLevelVpc); } @DB protected Vpc createVpc(final long zoneId, final long vpcOffId, final Account vpcOwner, final String vpcName, final String displayText, final String cidr, - final String networkDomain, final Boolean displayVpc) { + final String networkDomain, final Boolean displayVpc, regionLevelVpc) { //Validate CIDR if (!NetUtils.isValidCIDR(cidr)) { @@ -755,7 +764,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis return Transaction.execute(new TransactionCallback<VpcVO>() { @Override public VpcVO doInTransaction(TransactionStatus status) { - VpcVO vpc = new VpcVO(zoneId, vpcName, displayText, vpcOwner.getId(), vpcOwner.getDomainId(), vpcOffId, cidr, networkDomain); + VpcVO vpc = new VpcVO(zoneId, vpcName, displayText, vpcOwner.getId(), vpcOwner.getDomainId(), vpcOffId, cidr, networkDomain, regionLevelVpc); if (displayVpc != null) { vpc.setDisplay(displayVpc); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/server/test/com/cloud/vpc/VpcApiUnitTest.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/VpcApiUnitTest.java b/server/test/com/cloud/vpc/VpcApiUnitTest.java index bc982a9..0e927df 100644 --- a/server/test/com/cloud/vpc/VpcApiUnitTest.java +++ b/server/test/com/cloud/vpc/VpcApiUnitTest.java @@ -85,7 +85,7 @@ public class VpcApiUnitTest extends TestCase { public void validateNtwkOffForVpc() { //validate network offering //1) correct network offering - VpcVO vo = new VpcVO(1, "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain"); + VpcVO vo = new VpcVO(new Long(1), "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain", false); boolean result = false; try { _vpcService.validateNtwkOffForNtwkInVpc(2L, 1, "0.0.0.0", "111-", vo, "10.1.1.1", new AccountVO(), null); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java b/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java index 7a0c7a0..4563343 100644 --- a/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java +++ b/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java @@ -98,9 +98,9 @@ public class MockVpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDa public VpcVO findById(Long id) { VpcVO vo = null; if (id.longValue() == 1) { - vo = new VpcVO(1, "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain"); + vo = new VpcVO(new Long(1), "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain", false); } else if (id.longValue() == 2) { - vo = new VpcVO(1, "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain"); + vo = new VpcVO(new Long(1), "new vpc", "new vpc", 1, 1, 1, "0.0.0.0/0", "vpc domain", false); vo.setState(State.Inactive); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c0575aa0/setup/db/db/schema-430to440.sql ---------------------------------------------------------------------- diff --git a/setup/db/db/schema-430to440.sql b/setup/db/db/schema-430to440.sql index 0d7e747..4b38468 100644 --- a/setup/db/db/schema-430to440.sql +++ b/setup/db/db/schema-430to440.sql @@ -613,3 +613,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;
