You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2013/04/09 23:42:21 UTC
[33/50] [abbrv] git commit: updated refs/heads/vmsync to 2ee8fd2
Revert "Dedicate Public IP range"
This reverts commit d6ed8d7cb53da08cacd04c3ac7435da5601e7f06.
Conflicts:
server/test/com/cloud/configuration/ConfigurationManagerTest.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/98bc240d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/98bc240d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/98bc240d
Branch: refs/heads/vmsync
Commit: 98bc240d2a7f62a680a569b3789a65923906cd00
Parents: 67a99cb
Author: Jessica Wang <je...@citrix.com>
Authored: Mon Apr 8 17:15:24 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Mon Apr 8 17:15:51 2013 -0700
----------------------------------------------------------------------
.../cloud/configuration/ConfigurationService.java | 6 -
api/src/com/cloud/event/EventTypes.java | 2 -
.../admin/vlan/DedicatePublicIpRangeCmd.java | 116 ----
.../admin/vlan/ReleasePublicIpRangeCmd.java | 77 ---
client/tomcatconf/commands.properties.in | 2 -
.../cloud/configuration/ConfigurationManager.java | 7 +-
.../configuration/ConfigurationManagerImpl.java | 180 +------
.../src/com/cloud/network/NetworkManagerImpl.java | 46 +--
.../src/com/cloud/network/NetworkServiceImpl.java | 9 +
.../src/com/cloud/server/ManagementServerImpl.java | 2 -
server/src/com/cloud/user/AccountManagerImpl.java | 6 +-
.../configuration/ConfigurationManagerTest.java | 421 ---------------
.../cloud/vpc/MockConfigurationManagerImpl.java | 32 +--
test/integration/component/test_public_ip_range.py | 149 -----
tools/marvin/marvin/integration/lib/base.py | 11 -
15 files changed, 48 insertions(+), 1018 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/api/src/com/cloud/configuration/ConfigurationService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java
index 6937d0b..e63fcec 100644
--- a/api/src/com/cloud/configuration/ConfigurationService.java
+++ b/api/src/com/cloud/configuration/ConfigurationService.java
@@ -35,9 +35,7 @@ import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd
import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
@@ -236,10 +234,6 @@ public interface ConfigurationService {
boolean deleteVlanIpRange(DeleteVlanIpRangeCmd cmd);
- Vlan dedicatePublicIpRange(DedicatePublicIpRangeCmd cmd) throws ResourceAllocationException;
-
- boolean releasePublicIpRange(ReleasePublicIpRangeCmd cmd);
-
NetworkOffering createNetworkOffering(CreateNetworkOfferingCmd cmd);
NetworkOffering updateNetworkOffering(UpdateNetworkOfferingCmd cmd);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/api/src/com/cloud/event/EventTypes.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java
index 0dc16f3..704a1bf 100755
--- a/api/src/com/cloud/event/EventTypes.java
+++ b/api/src/com/cloud/event/EventTypes.java
@@ -223,8 +223,6 @@ public class EventTypes {
// VLANs/IP ranges
public static final String EVENT_VLAN_IP_RANGE_CREATE = "VLAN.IP.RANGE.CREATE";
public static final String EVENT_VLAN_IP_RANGE_DELETE = "VLAN.IP.RANGE.DELETE";
- public static final String EVENT_VLAN_IP_RANGE_DEDICATE = "VLAN.IP.RANGE.DEDICATE";
- public static final String EVENT_VLAN_IP_RANGE_RELEASE = "VLAN.IP.RANGE.RELEASE";
public static final String EVENT_STORAGE_IP_RANGE_CREATE = "STORAGE.IP.RANGE.CREATE";
public static final String EVENT_STORAGE_IP_RANGE_DELETE = "STORAGE.IP.RANGE.DELETE";
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
deleted file mode 100644
index c62857c..0000000
--- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DedicatePublicIpRangeCmd.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.api.command.admin.vlan;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.DomainResponse;
-import org.apache.cloudstack.api.response.ProjectResponse;
-import org.apache.cloudstack.api.response.VlanIpRangeResponse;
-import org.apache.cloudstack.api.response.ZoneResponse;
-import org.apache.log4j.Logger;
-
-import com.cloud.dc.Vlan;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.user.Account;
-
-@APICommand(name = "dedicatePublicIpRange", description="Dedicates a Public IP range to an account", responseObject=VlanIpRangeResponse.class)
-public class DedicatePublicIpRangeCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(DedicatePublicIpRangeCmd.class.getName());
-
- private static final String s_name = "dedicatepubliciprangeresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VlanIpRangeResponse.class,
- required=true, description="the id of the VLAN IP range")
- private Long id;
-
- @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true,
- description="account who will own the VLAN")
- private String accountName;
-
- @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class,
- description="project who will own the VLAN")
- private Long projectId;
-
- @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class,
- required=true, description="domain ID of the account owning a VLAN")
- private Long domainId;
-
- @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class,
- required=true, description="the Zone ID of the VLAN IP range")
- private Long zoneId;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getId() {
- return id;
- }
-
- public String getAccountName() {
- return accountName;
- }
-
- public Long getDomainId() {
- return domainId;
- }
-
- public Long getProjectId() {
- return projectId;
- }
-
- public Long getZoneId() {
- return zoneId;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @Override
- public void execute() throws ResourceUnavailableException, ResourceAllocationException {
- Vlan result = _configService.dedicatePublicIpRange(this);
- if (result != null) {
- VlanIpRangeResponse response = _responseGenerator.createVlanIpRangeResponse(result);
- response.setResponseName(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to dedicate vlan ip range");
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
deleted file mode 100644
index 91cc7d3..0000000
--- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ReleasePublicIpRangeCmd.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.api.command.admin.vlan;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import org.apache.cloudstack.api.response.VlanIpRangeResponse;
-import org.apache.log4j.Logger;
-
-import com.cloud.user.Account;
-
-@APICommand(name = "releasePublicIpRange", description="Releases a Public IP range back to the system pool", responseObject=SuccessResponse.class)
-public class ReleasePublicIpRangeCmd extends BaseCmd {
- public static final Logger s_logger = Logger.getLogger(ReleasePublicIpRangeCmd.class.getName());
-
- private static final String s_name = "releasepubliciprangeresponse";
-
- /////////////////////////////////////////////////////
- //////////////// API parameters /////////////////////
- /////////////////////////////////////////////////////
-
- @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VlanIpRangeResponse.class,
- required=true, description="the id of the Public IP range")
- private Long id;
-
- /////////////////////////////////////////////////////
- /////////////////// Accessors ///////////////////////
- /////////////////////////////////////////////////////
-
- public Long getId() {
- return id;
- }
-
- /////////////////////////////////////////////////////
- /////////////// API Implementation///////////////////
- /////////////////////////////////////////////////////
-
- @Override
- public String getCommandName() {
- return s_name;
- }
-
- @Override
- public long getEntityOwnerId() {
- return Account.ACCOUNT_ID_SYSTEM;
- }
-
- @Override
- public void execute(){
- boolean result = _configService.releasePublicIpRange(this);
- if (result) {
- SuccessResponse response = new SuccessResponse(getCommandName());
- this.setResponseObject(response);
- } else {
- throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to release public ip range");
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in
index 3e55672..163c2ce 100644
--- a/client/tomcatconf/commands.properties.in
+++ b/client/tomcatconf/commands.properties.in
@@ -124,8 +124,6 @@ listDiskOfferings=15
createVlanIpRange=1
deleteVlanIpRange=1
listVlanIpRanges=1
-dedicatePublicIpRange=1
-releasePublicIpRange=1
#### address commands
associateIpAddress=15
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/src/com/cloud/configuration/ConfigurationManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManager.java b/server/src/com/cloud/configuration/ConfigurationManager.java
index 52b32f4..20e9884 100644
--- a/server/src/com/cloud/configuration/ConfigurationManager.java
+++ b/server/src/com/cloud/configuration/ConfigurationManager.java
@@ -30,7 +30,6 @@ import com.cloud.dc.Vlan;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.ResourceAllocationException;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
@@ -150,10 +149,6 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
*/
boolean deleteVlanAndPublicIpRange(long userId, long vlanDbId, Account caller);
- boolean releasePublicIpRange(long userId, long vlanDbId, Account caller);
-
- Vlan dedicatePublicIpRange(Long vlanDbId, String accountName, Long domainId, Long zoneId, Long projectId) throws ResourceAllocationException;
-
/**
* Converts a comma separated list of tags to a List
*
@@ -215,7 +210,7 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
ClusterVO getCluster(long id);
- boolean releaseAccountSpecificVirtualRanges(long accountId);
+ boolean deleteAccountSpecificVirtualRanges(long accountId);
/**
* Edits a pod in the database. Will not allow you to edit pods that are being used anywhere in the system.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 86d30b4..1526fb0 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -56,9 +56,7 @@ import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd
import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
@@ -2308,6 +2306,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks");
}
+ // if it's an account specific range, associate ip address list to the account
+ boolean associateIpRangeToAccount = false;
+
if (forVirtualNetwork) {
if (vlanOwner != null) {
@@ -2315,6 +2316,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
//check resource limits
_resourceLimitMgr.checkResourceLimit(vlanOwner, ResourceType.public_ip, accountIpRange);
+
+ associateIpRangeToAccount = true;
}
}
@@ -2329,6 +2332,21 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
endIP, vlanGateway, vlanNetmask, vlanId, vlanOwner, startIPv6, endIPv6, ip6Gateway, ip6Cidr);
txn.commit();
+ if (associateIpRangeToAccount) {
+ _networkMgr.associateIpAddressListToAccount(userId, vlanOwner.getId(), zoneId, vlan.getId(), null);
+ }
+
+ // Associate ips to the network
+ if (associateIpRangeToAccount) {
+ if (network.getState() == Network.State.Implemented) {
+ s_logger.debug("Applying ip associations for vlan id=" + vlanId + " in network " + network);
+ if (!_networkMgr.applyIpAssociations(network, false)) {
+ s_logger.warn("Failed to apply ip associations for vlan id=1 as a part of add vlan range for account id=" + vlanOwner.getId());
+ }
+ } else {
+ s_logger.trace("Network id=" + network.getId() + " is not Implemented, no need to apply ipAssociations");
+ }
+ }
return vlan;
}
@@ -2681,156 +2699,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
@Override
- @ActionEvent(eventType = EventTypes.EVENT_VLAN_IP_RANGE_DEDICATE, eventDescription = "dedicating vlan ip range", async = false)
- public Vlan dedicatePublicIpRange(DedicatePublicIpRangeCmd cmd) throws ResourceAllocationException {
- Long vlanDbId = cmd.getId();
- String accountName = cmd.getAccountName();
- Long domainId = cmd.getDomainId();
- Long zoneId = cmd.getZoneId();
- Long projectId = cmd.getProjectId();
-
- Vlan vlan = dedicatePublicIpRange(vlanDbId, accountName, domainId, zoneId, projectId);
-
- return vlan;
- }
-
- @Override
- @DB
- public Vlan dedicatePublicIpRange(Long vlanDbId, String accountName, Long domainId, Long zoneId, Long projectId) throws ResourceAllocationException {
- // Check if account is valid
- Account vlanOwner = null;
- if (projectId != null) {
- if (accountName != null) {
- throw new InvalidParameterValueException("accountName and projectId are mutually exclusive");
- }
- Project project = _projectMgr.getProject(projectId);
- if (project == null) {
- throw new InvalidParameterValueException("Unable to find project by id " + projectId);
- }
- vlanOwner = _accountMgr.getAccount(project.getProjectAccountId());
- }
-
- if ((accountName != null) && (domainId != null)) {
- vlanOwner = _accountDao.findActiveAccount(accountName, domainId);
- if (vlanOwner == null) {
- throw new InvalidParameterValueException("Please specify a valid account");
- }
- }
-
- // Check if range is valid
- VlanVO vlan = _vlanDao.findById(vlanDbId);
- if (vlan == null) {
- throw new InvalidParameterValueException("Please specify a valid Public IP range id");
- }
-
- // Check if range has already been dedicated
- List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByVlan(vlanDbId);
- if (maps != null && !maps.isEmpty()) {
- throw new InvalidParameterValueException("Specified Public IP range has already been dedicated");
- }
-
- // Verify that zone exists and is advanced
- DataCenterVO zone = _zoneDao.findById(zoneId);
- if (zone == null) {
- throw new InvalidParameterValueException("Unable to find zone by id " + zoneId);
- }
- if (zone.getNetworkType() == NetworkType.Basic) {
- throw new InvalidParameterValueException("Public IP range can be dedicated to an account only in the zone of type " + NetworkType.Advanced);
- }
-
- // Check Public IP resource limits
- int accountPublicIpRange = _publicIpAddressDao.countIPs(zoneId, vlanDbId, false);
- _resourceLimitMgr.checkResourceLimit(vlanOwner, ResourceType.public_ip, accountPublicIpRange);
-
- // Check if any of the Public IP addresses is allocated to another account
- List<IPAddressVO> ips = _publicIpAddressDao.listByVlanId(vlanDbId);
- for (IPAddressVO ip : ips) {
- Long allocatedToAccountId = ip.getAllocatedToAccountId();
- if (allocatedToAccountId != null) {
- Account accountAllocatedTo = _accountMgr.getActiveAccountById(allocatedToAccountId);
- if (!accountAllocatedTo.getAccountName().equalsIgnoreCase(accountName))
- throw new InvalidParameterValueException("Public IP address in range is already allocated to another account");
- }
- }
-
- Transaction txn = Transaction.currentTxn();
- txn.start();
-
- // Create an AccountVlanMapVO entry
- AccountVlanMapVO accountVlanMapVO = new AccountVlanMapVO(vlanOwner.getId(), vlan.getId());
- _accountVlanMapDao.persist(accountVlanMapVO);
-
- txn.commit();
-
- return vlan;
- }
-
- @Override
- @ActionEvent(eventType = EventTypes.EVENT_VLAN_IP_RANGE_RELEASE, eventDescription = "releasing a public ip range", async = false)
- public boolean releasePublicIpRange(ReleasePublicIpRangeCmd cmd) {
- Long vlanDbId = cmd.getId();
-
- VlanVO vlan = _vlanDao.findById(vlanDbId);
- if (vlan == null) {
- throw new InvalidParameterValueException("Please specify a valid IP range id.");
- }
-
- return releasePublicIpRange(vlanDbId, UserContext.current().getCallerUserId(), UserContext.current().getCaller());
- }
-
- @Override
- @DB
- public boolean releasePublicIpRange(long vlanDbId, long userId, Account caller) {
- VlanVO vlan = _vlanDao.findById(vlanDbId);
-
- List<AccountVlanMapVO> acctVln = _accountVlanMapDao.listAccountVlanMapsByVlan(vlanDbId);
- // Verify range is dedicated
- if (acctVln == null || acctVln.isEmpty()) {
- throw new InvalidParameterValueException("Can't release Public IP range " + vlanDbId + " as it not dedicated to any account");
- }
-
- // Check if range has any allocated public IPs
- long allocIpCount = _publicIpAddressDao.countIPs(vlan.getDataCenterId(), vlanDbId, true);
- boolean success = true;
- if (allocIpCount > 0) {
- try {
- vlan = _vlanDao.acquireInLockTable(vlanDbId, 30);
- if (vlan == null) {
- throw new CloudRuntimeException("Unable to acquire vlan configuration: " + vlanDbId);
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("lock vlan " + vlanDbId + " is acquired");
- }
- List<IPAddressVO> ips = _publicIpAddressDao.listByVlanId(vlanDbId);
- for (IPAddressVO ip : ips) {
- // Disassociate allocated IP's that are not in use
- if ( !ip.isOneToOneNat() && !(ip.isSourceNat() && _networkModel.getNetwork(ip.getAssociatedWithNetworkId()) != null) &&
- !(_firewallDao.countRulesByIpId(ip.getId()) > 0) ) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Releasing Public IP addresses" + ip +" of vlan " + vlanDbId + " as part of Public IP" +
- " range release to the system pool");
- }
- success = success && _networkMgr.disassociatePublicIpAddress(ip.getId(), userId, caller);
- }
- }
- if (!success) {
- s_logger.warn("Some Public IP addresses that were not in use failed to be released as a part of" +
- " vlan " + vlanDbId + "release to the system pool");
- }
- } finally {
- _vlanDao.releaseFromLockTable(vlanDbId);
- }
- }
-
- // A Public IP range can only be dedicated to one account at a time
- if (_accountVlanMapDao.remove(acctVln.get(0).getId())) {
- return true;
- } else {
- return false;
- }
- }
-
- @Override
public List<String> csvTagsToList(String tags) {
List<String> tagsList = new ArrayList<String>();
@@ -4089,14 +3957,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
@DB
- public boolean releaseAccountSpecificVirtualRanges(long accountId) {
+ public boolean deleteAccountSpecificVirtualRanges(long accountId) {
List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(accountId);
boolean result = true;
if (maps != null && !maps.isEmpty()) {
Transaction txn = Transaction.currentTxn();
txn.start();
for (AccountVlanMapVO map : maps) {
- if (!releasePublicIpRange(map.getVlanDbId(), _accountMgr.getSystemUser().getId(),
+ if (!deleteVlanAndPublicIpRange(_accountMgr.getSystemUser().getId(), map.getVlanDbId(),
_accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM))) {
result = false;
}
@@ -4104,10 +3972,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if (result) {
txn.commit();
} else {
- s_logger.error("Failed to release account specific virtual ip ranges for account id=" + accountId);
+ s_logger.error("Failed to delete account specific virtual ip ranges for account id=" + accountId);
}
} else {
- s_logger.trace("Account id=" + accountId + " has no account specific virtual ip ranges, nothing to release");
+ s_logger.trace("Account id=" + accountId + " has no account specific virtual ip ranges, nothing to delete");
}
return result;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 43a0988..6296011 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -188,7 +188,6 @@ import com.cloud.vm.ReservationContextImpl;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.*;
import com.cloud.vm.VirtualMachine.Type;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.NicDao;
@@ -349,7 +348,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
}
@DB
- public PublicIp fetchNewPublicIp(long dcId, Long podId, List<Long> vlanDbIds, Account owner, VlanType vlanUse,
+ public PublicIp fetchNewPublicIp(long dcId, Long podId, Long vlanDbId, Account owner, VlanType vlanUse,
Long guestNetworkId, boolean sourceNat, boolean assign, String requestedIp, boolean isSystem, Long vpcId)
throws InsufficientAddressCapacityException {
StringBuilder errorMessage = new StringBuilder("Unable to get ip adress in ");
@@ -365,9 +364,9 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
errorMessage.append(" zone id=" + dcId);
}
- if ( vlanDbIds != null && !vlanDbIds.isEmpty() ) {
- sc.setParameters("vlanId", vlanDbIds.toArray());
- errorMessage.append(", vlanId id=" + vlanDbIds.toArray());
+ if (vlanDbId != null) {
+ sc.addAnd("vlanId", SearchCriteria.Op.EQ, vlanDbId);
+ errorMessage.append(", vlanId id=" + vlanDbId);
}
sc.setParameters("dc", dcId);
@@ -527,14 +526,14 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
}
// If account has Account specific ip ranges, try to allocate ip from there
- List<Long> vlanIds = new ArrayList<Long>();
+ Long vlanId = null;
List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(ownerId);
if (maps != null && !maps.isEmpty()) {
- vlanIds.add(maps.get(0).getVlanDbId());
+ vlanId = maps.get(0).getVlanDbId();
}
- ip = fetchNewPublicIp(dcId, null, vlanIds, owner, VlanType.VirtualNetwork, guestNtwkId,
+ ip = fetchNewPublicIp(dcId, null, vlanId, owner, VlanType.VirtualNetwork, guestNtwkId,
isSourceNat, false, null, false, vpcId);
IPAddressVO publicIp = ip.ip();
@@ -670,7 +669,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
VlanType vlanType = VlanType.VirtualNetwork;
boolean assign = false;
- boolean allocateFromDedicatedRange = false;
if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) {
// zone is of type DataCenter. See DataCenterVO.java.
@@ -704,32 +702,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
txn.start();
- // If account has dedicated Public IP ranges, allocate IP from the dedicated range
- List<Long> vlanDbIds = new ArrayList<Long>();
- List<AccountVlanMapVO> maps = _accountVlanMapDao.listAccountVlanMapsByAccount(ipOwner.getId());
- for (AccountVlanMapVO map : maps) {
- vlanDbIds.add(map.getVlanDbId());
- }
- if (vlanDbIds != null && !vlanDbIds.isEmpty()) {
- allocateFromDedicatedRange = true;
- }
-
- try {
- if (allocateFromDedicatedRange) {
- ip = fetchNewPublicIp(zone.getId(), null, vlanDbIds, ipOwner, vlanType, null,
- false, assign, null, isSystem, null);
- }
- } catch(InsufficientAddressCapacityException e) {
- s_logger.warn("All IPs dedicated to account " + ipOwner.getId() + " has been acquired." +
- " Now acquiring from the system pool");
- txn.close();
- allocateFromDedicatedRange = false;
- }
-
- if (!allocateFromDedicatedRange) {
- ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null, false, assign, null,
- isSystem, null);
- }
+ ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null,
+ false, assign, null, isSystem, null);
if (ip == null) {
@@ -1096,7 +1070,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
AssignIpAddressSearch = _ipAddressDao.createSearchBuilder();
AssignIpAddressSearch.and("dc", AssignIpAddressSearch.entity().getDataCenterId(), Op.EQ);
AssignIpAddressSearch.and("allocated", AssignIpAddressSearch.entity().getAllocatedTime(), Op.NULL);
- AssignIpAddressSearch.and("vlanId", AssignIpAddressSearch.entity().getVlanId(), Op.IN);
+ AssignIpAddressSearch.and("vlanId", AssignIpAddressSearch.entity().getVlanId(), Op.EQ);
SearchBuilder<VlanVO> vlanSearch = _vlanDao.createSearchBuilder();
vlanSearch.and("type", vlanSearch.entity().getVlanType(), Op.EQ);
vlanSearch.and("networkId", vlanSearch.entity().getNetworkId(), Op.EQ);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/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 a8cbaa7..4eb620c 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -697,6 +697,15 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
throw new IllegalArgumentException("only ip addresses that belong to a virtual network may be disassociated.");
}
+ // Check for account wide pool. It will have an entry for account_vlan_map.
+ if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) {
+ //see IPaddressVO.java
+ InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" +
+ " Account wide IP pool and cannot be disassociated");
+ ex.addProxyObject("user_ip_address", ipAddressId, "ipAddressId");
+ throw ex;
+ }
+
// don't allow releasing system ip address
if (ipVO.getSystem()) {
InvalidParameterValueException ex = new InvalidParameterValueException("Can't release system IP address with specified id");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index b89de9e..af77ba5 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -2090,8 +2090,6 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
cmdList.add(CreateVlanIpRangeCmd.class);
cmdList.add(DeleteVlanIpRangeCmd.class);
cmdList.add(ListVlanIpRangesCmd.class);
- cmdList.add(DedicatePublicIpRangeCmd.class);
- cmdList.add(ReleasePublicIpRangeCmd.class);
cmdList.add(AssignVMCmd.class);
cmdList.add(MigrateVMCmd.class);
cmdList.add(RecoverVMCmd.class);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 417ec3f..52ca79d 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -683,13 +683,13 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
accountCleanupNeeded = true;
}
- // release account specific Virtual vlans (belong to system Public Network) - only when networks are cleaned
+ // delete account specific Virtual vlans (belong to system Public Network) - only when networks are cleaned
// up successfully
if (networksDeleted) {
- if (!_configMgr.releaseAccountSpecificVirtualRanges(accountId)) {
+ if (!_configMgr.deleteAccountSpecificVirtualRanges(accountId)) {
accountCleanupNeeded = true;
} else {
- s_logger.debug("Account specific Virtual IP ranges " + " are successfully released as a part of account id=" + accountId + " cleanup.");
+ s_logger.debug("Account specific Virtual IP ranges " + " are successfully deleted as a part of account id=" + accountId + " cleanup.");
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/test/com/cloud/configuration/ConfigurationManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/configuration/ConfigurationManagerTest.java b/server/test/com/cloud/configuration/ConfigurationManagerTest.java
deleted file mode 100644
index 321f605..0000000
--- a/server/test/com/cloud/configuration/ConfigurationManagerTest.java
+++ /dev/null
@@ -1,421 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.configuration;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.when;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import junit.framework.Assert;
-
-import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import com.cloud.configuration.Resource.ResourceType;
-import com.cloud.dc.AccountVlanMapVO;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.Vlan;
-import com.cloud.dc.VlanVO;
-import com.cloud.dc.dao.AccountVlanMapDao;
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.dc.dao.VlanDao;
-import com.cloud.network.NetworkManager;
-import com.cloud.network.dao.FirewallRulesDao;
-import com.cloud.network.dao.IPAddressDao;
-import com.cloud.network.dao.IPAddressVO;
-import com.cloud.projects.ProjectManager;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountVO;
-import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.net.Ip;
-
-public class ConfigurationManagerTest {
-
- private static final Logger s_logger = Logger.getLogger(ConfigurationManagerTest.class);
-
- ConfigurationManagerImpl configurationMgr = new ConfigurationManagerImpl();
-
- DedicatePublicIpRangeCmd dedicatePublicIpRangesCmd = new DedicatePublicIpRangeCmdExtn();
- Class<?> _dedicatePublicIpRangeClass = dedicatePublicIpRangesCmd.getClass().getSuperclass();
-
- ReleasePublicIpRangeCmd releasePublicIpRangesCmd = new ReleasePublicIpRangeCmdExtn();
- Class<?> _releasePublicIpRangeClass = releasePublicIpRangesCmd.getClass().getSuperclass();
-
- @Mock AccountManager _accountMgr;
- @Mock ProjectManager _projectMgr;
- @Mock ResourceLimitService _resourceLimitMgr;
- @Mock NetworkManager _networkMgr;
- @Mock AccountDao _accountDao;
- @Mock VlanDao _vlanDao;
- @Mock AccountVlanMapDao _accountVlanMapDao;
- @Mock IPAddressDao _publicIpAddressDao;
- @Mock DataCenterDao _zoneDao;
- @Mock FirewallRulesDao _firewallDao;
-
- VlanVO vlan = new VlanVO();
-
- @Before
- public void setup() throws Exception {
- MockitoAnnotations.initMocks(this);
- configurationMgr._accountMgr = _accountMgr;
- configurationMgr._projectMgr = _projectMgr;
- configurationMgr._resourceLimitMgr = _resourceLimitMgr;
- configurationMgr._networkMgr = _networkMgr;
- configurationMgr._accountDao = _accountDao;
- configurationMgr._vlanDao = _vlanDao;
- configurationMgr._accountVlanMapDao = _accountVlanMapDao;
- configurationMgr._publicIpAddressDao = _publicIpAddressDao;
- configurationMgr._zoneDao = _zoneDao;
- configurationMgr._firewallDao = _firewallDao;
-
- Account account = (Account) new AccountVO("testaccount", 1, "networkdomain", (short) 0, UUID.randomUUID().toString());
- when(configurationMgr._accountMgr.getAccount(anyLong())).thenReturn(account);
- when(configurationMgr._accountDao.findActiveAccount(anyString(), anyLong())).thenReturn(account);
- when(configurationMgr._accountMgr.getActiveAccountById(anyLong())).thenReturn(account);
-
- when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1);
-
- doNothing().when(configurationMgr._resourceLimitMgr).checkResourceLimit(any(Account.class),
- any(ResourceType.class), anyLong());
-
- when(configurationMgr._accountVlanMapDao.persist(any(AccountVlanMapVO.class))).thenReturn(new AccountVlanMapVO());
-
- when(configurationMgr._vlanDao.acquireInLockTable(anyLong(), anyInt())).thenReturn(vlan);
-
- UserContext.registerContext(1, account, null, true);
-
- Field dedicateIdField = _dedicatePublicIpRangeClass.getDeclaredField("id");
- dedicateIdField.setAccessible(true);
- dedicateIdField.set(dedicatePublicIpRangesCmd, 1L);
-
- Field accountNameField = _dedicatePublicIpRangeClass.getDeclaredField("accountName");
- accountNameField.setAccessible(true);
- accountNameField.set(dedicatePublicIpRangesCmd, "accountname");
-
- Field projectIdField = _dedicatePublicIpRangeClass.getDeclaredField("projectId");
- projectIdField.setAccessible(true);
- projectIdField.set(dedicatePublicIpRangesCmd, null);
-
- Field domainIdField = _dedicatePublicIpRangeClass.getDeclaredField("domainId");
- domainIdField.setAccessible(true);
- domainIdField.set(dedicatePublicIpRangesCmd, 1L);
-
- Field zoneIdField = _dedicatePublicIpRangeClass.getDeclaredField("zoneId");
- zoneIdField.setAccessible(true);
- zoneIdField.set(dedicatePublicIpRangesCmd, 1L);
-
- Field releaseIdField = _releasePublicIpRangeClass.getDeclaredField("id");
- releaseIdField.setAccessible(true);
- releaseIdField.set(releasePublicIpRangesCmd, 1L);
- }
-
- @Test
- public void testDedicatePublicIpRange() throws Exception {
-
- s_logger.info("Running tests for DedicatePublicIpRange API");
-
- /*
- * TEST 1: given valid parameters DedicatePublicIpRange should succeed
- */
- runDedicatePublicIpRangePostiveTest();
-
- /*
- * TEST 2: given invalid public ip range DedicatePublicIpRange should fail
- */
- runDedicatePublicIpRangeInvalidRange();
- /*
- * TEST 3: given public IP range that is already dedicated to a different account DedicatePublicIpRange should fail
- */
- runDedicatePublicIpRangeDedicatedRange();
-
- /*
- * TEST 4: given zone is of type Basic DedicatePublicIpRange should fail
- */
- runDedicatePublicIpRangeInvalidZone();
-
- /*
- * TEST 5: given range is already allocated to a different account DedicatePublicIpRange should fail
- */
- runDedicatePublicIpRangeIPAdressAllocated();
- }
-
- @Test
- public void testReleasePublicIpRange() throws Exception {
-
- s_logger.info("Running tests for DedicatePublicIpRange API");
-
- /*
- * TEST 1: given valid parameters and no allocated public ip's in the range ReleasePublicIpRange should succeed
- */
- runReleasePublicIpRangePostiveTest1();
-
- /*
- * TEST 2: given valid parameters ReleasePublicIpRange should succeed
- */
- runReleasePublicIpRangePostiveTest2();
-
- /*
- * TEST 3: given range doesn't exist
- */
- runReleasePublicIpRangeInvalidIpRange();
-
- /*
- * TEST 4: given range is not dedicated to any account
- */
- runReleaseNonDedicatedPublicIpRange();
- }
-
- void runDedicatePublicIpRangePostiveTest() throws Exception {
- Transaction txn = Transaction.open("runDedicatePublicIpRangePostiveTest");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByAccount(anyLong())).thenReturn(null);
-
- DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
- null, null, NetworkType.Advanced, null, null, true, true, null, null);
- when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc);
-
- List<IPAddressVO> ipAddressList = new ArrayList<IPAddressVO>();
- IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
- ipAddressList.add(ipAddress);
- when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList);
-
- try {
- Vlan result = configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd);
- Assert.assertNotNull(result);
- } catch (Exception e) {
- s_logger.info("exception in testing runDedicatePublicIpRangePostiveTest message: " + e.toString());
- } finally {
- txn.close("runDedicatePublicIpRangePostiveTest");
- }
- }
-
- void runDedicatePublicIpRangeInvalidRange() throws Exception {
- Transaction txn = Transaction.open("runDedicatePublicIpRangeInvalidRange");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(null);
- try {
- configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("Please specify a valid Public IP range id"));
- } finally {
- txn.close("runDedicatePublicIpRangeInvalidRange");
- }
- }
-
- void runDedicatePublicIpRangeDedicatedRange() throws Exception {
- Transaction txn = Transaction.open("runDedicatePublicIpRangeDedicatedRange");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- // public ip range is already dedicated
- List<AccountVlanMapVO> accountVlanMaps = new ArrayList<AccountVlanMapVO>();
- AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1);
- accountVlanMaps.add(accountVlanMap);
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps);
-
- DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
- null, null, NetworkType.Advanced, null, null, true, true, null, null);
- when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc);
-
- List<IPAddressVO> ipAddressList = new ArrayList<IPAddressVO>();
- IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
- ipAddressList.add(ipAddress);
- when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList);
-
- try {
- configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("Public IP range has already been dedicated"));
- } finally {
- txn.close("runDedicatePublicIpRangePublicIpRangeDedicated");
- }
- }
-
- void runDedicatePublicIpRangeInvalidZone() throws Exception {
- Transaction txn = Transaction.open("runDedicatePublicIpRangeInvalidZone");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(null);
-
- // public ip range belongs to zone of type basic
- DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
- null, null, NetworkType.Basic, null, null, true, true, null, null);
- when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc);
-
- List<IPAddressVO> ipAddressList = new ArrayList<IPAddressVO>();
- IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
- ipAddressList.add(ipAddress);
- when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList);
-
- try {
- configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("Public IP range can be dedicated to an account only in the zone of type Advanced"));
- } finally {
- txn.close("runDedicatePublicIpRangeInvalidZone");
- }
- }
-
- void runDedicatePublicIpRangeIPAdressAllocated() throws Exception {
- Transaction txn = Transaction.open("runDedicatePublicIpRangeIPAdressAllocated");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByAccount(anyLong())).thenReturn(null);
-
- DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
- null, null, NetworkType.Advanced, null, null, true, true, null, null);
- when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc);
-
- // one of the ip addresses of the range is allocated to different account
- List<IPAddressVO> ipAddressList = new ArrayList<IPAddressVO>();
- IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
- ipAddress.setAllocatedToAccountId(1L);
- ipAddressList.add(ipAddress);
- when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList);
-
- try {
- configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("Public IP address in range is already allocated to another account"));
- } finally {
- txn.close("runDedicatePublicIpRangeIPAdressAllocated");
- }
- }
-
- void runReleasePublicIpRangePostiveTest1() throws Exception {
- Transaction txn = Transaction.open("runReleasePublicIpRangePostiveTest1");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- List<AccountVlanMapVO> accountVlanMaps = new ArrayList<AccountVlanMapVO>();
- AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1);
- accountVlanMaps.add(accountVlanMap);
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps);
-
- // no allocated ip's
- when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0);
-
- when(configurationMgr._accountVlanMapDao.remove(anyLong())).thenReturn(true);
- try {
- Boolean result = configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd);
- Assert.assertTrue(result);
- } catch (Exception e) {
- s_logger.info("exception in testing runReleasePublicIpRangePostiveTest1 message: " + e.toString());
- } finally {
- txn.close("runReleasePublicIpRangePostiveTest1");
- }
- }
-
- void runReleasePublicIpRangePostiveTest2() throws Exception {
- Transaction txn = Transaction.open("runReleasePublicIpRangePostiveTest2");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- List<AccountVlanMapVO> accountVlanMaps = new ArrayList<AccountVlanMapVO>();
- AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1);
- accountVlanMaps.add(accountVlanMap);
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps);
-
- when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1);
-
- List<IPAddressVO> ipAddressList = new ArrayList<IPAddressVO>();
- IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
- ipAddressList.add(ipAddress);
- when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList);
-
- when(configurationMgr._firewallDao.countRulesByIpId(anyLong())).thenReturn(0L);
-
- when(configurationMgr._networkMgr.disassociatePublicIpAddress(anyLong(), anyLong(), any(Account.class))).thenReturn(true);
-
- when(configurationMgr._vlanDao.releaseFromLockTable(anyLong())).thenReturn(true);
-
- when(configurationMgr._accountVlanMapDao.remove(anyLong())).thenReturn(true);
- try {
- Boolean result = configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd);
- Assert.assertTrue(result);
- } catch (Exception e) {
- s_logger.info("exception in testing runReleasePublicIpRangePostiveTest2 message: " + e.toString());
- } finally {
- txn.close("runReleasePublicIpRangePostiveTest2");
- }
- }
-
- void runReleasePublicIpRangeInvalidIpRange() throws Exception {
- Transaction txn = Transaction.open("runReleasePublicIpRangeInvalidIpRange");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(null);
- try {
- configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("Please specify a valid IP range id"));
- } finally {
- txn.close("runReleasePublicIpRangeInvalidIpRange");
- }
- }
-
- void runReleaseNonDedicatedPublicIpRange() throws Exception {
- Transaction txn = Transaction.open("runReleaseNonDedicatedPublicIpRange");
-
- when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan);
-
- when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(null);
- try {
- configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd);
- } catch (Exception e) {
- Assert.assertTrue(e.getMessage().contains("as it not dedicated to any account"));
- } finally {
- txn.close("runReleaseNonDedicatedPublicIpRange");
- }
- }
-
-
- public class DedicatePublicIpRangeCmdExtn extends DedicatePublicIpRangeCmd {
- public long getEntityOwnerId() {
- return 1;
- }
- }
-
- public class ReleasePublicIpRangeCmdExtn extends ReleasePublicIpRangeCmd {
- public long getEntityOwnerId() {
- return 1;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
index f781e61..d96e831 100644
--- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
@@ -40,9 +40,7 @@ import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd
import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;
-import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
@@ -546,7 +544,7 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
* @see com.cloud.configuration.ConfigurationManager#deleteAccountSpecificVirtualRanges(long)
*/
@Override
- public boolean releaseAccountSpecificVirtualRanges(long accountId) {
+ public boolean deleteAccountSpecificVirtualRanges(long accountId) {
// TODO Auto-generated method stub
return false;
}
@@ -615,33 +613,5 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
return null;
}
- @Override
- public Vlan dedicatePublicIpRange(DedicatePublicIpRangeCmd cmd)
- throws ResourceAllocationException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public boolean releasePublicIpRange(ReleasePublicIpRangeCmd cmd) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean releasePublicIpRange(long userId, long vlanDbId,
- Account caller) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public Vlan dedicatePublicIpRange(Long vlanDbId, String accountName,
- Long domainId, Long zoneId, Long projectId)
- throws ResourceAllocationException {
- // TODO Auto-generated method stub
- return null;
- }
-
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/test/integration/component/test_public_ip_range.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_public_ip_range.py b/test/integration/component/test_public_ip_range.py
deleted file mode 100644
index 1cb2e48..0000000
--- a/test/integration/component/test_public_ip_range.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-""" P1 tests for Dedicating Public IP addresses
-"""
-#Import Local Modules
-import marvin
-from nose.plugins.attrib import attr
-from marvin.cloudstackTestCase import *
-from marvin.cloudstackAPI import *
-from marvin.integration.lib.utils import *
-from marvin.integration.lib.base import *
-from marvin.integration.lib.common import *
-import datetime
-
-class Services:
- """Test Dedicating Public IP addresses
- """
-
- def __init__(self):
- self.services = {
- "domain": {
- "name": "Domain",
- },
- "account": {
- "email": "test@test.com",
- "firstname": "Test",
- "lastname": "User",
- "username": "test",
- # Random characters are appended for unique
- # username
- "password": "password",
- },
- "gateway": "10.102.196.1",
- "netmask": "255.255.255.0",
- "forvirtualnetwork": "true",
- "startip": "10.102.196.70",
- "endip": "10.102.196.73",
- "zoneid": "1",
- "podid": "",
- "vlan": "101",
- "sleep": 60,
- "timeout": 10,
- }
-
-class TesDedicatePublicIPRange(cloudstackTestCase):
-
- @classmethod
- def setUpClass(cls):
- cls.api_client = super(TesDedicatePublicIPRange, cls).getClsTestClient().getApiClient()
- cls.services = Services().services
- # Get Zone, Domain
- cls.domain = get_domain(cls.api_client, cls.services)
- cls.zone = get_zone(cls.api_client, cls.services)
-
- # Create Account, VMs etc
- cls.account = Account.create(
- cls.api_client,
- cls.services["account"],
- domainid=cls.domain.id
- )
- cls._cleanup = [
- #cls.account,
- ]
- return
-
- @classmethod
- def tearDownClass(cls):
- try:
- # Cleanup resources used
- cleanup_resources(cls.api_client, cls._cleanup)
- except Exception as e:
- raise Exception("Warning: Exception during cleanup : %s" % e)
- return
-
- def setUp(self):
- self.apiclient = self.testClient.getApiClient()
- self.dbclient = self.testClient.getDbConnection()
- self.cleanup = []
- return
-
- def tearDown(self):
- try:
- # Clean up
- cleanup_resources(self.apiclient, self.cleanup)
- except Exception as e:
- raise Exception("Warning: Exception during cleanup : %s" % e)
- return
-
- @attr(tags = ["publiciprange", "dedicate"])
- def test_createPublicIpRange(self):
- """Test create public IP range
- """
-
-
- # Validate the following:
- # 1. Create public IP range.
- # 2. Created IP range should be present, verify with listVlanIpRanges
-
- self.debug("Creating Public IP range")
- self.public_ip_range = PublicIpRange.create(
- self.api_client,
- self.services
- )
- list_public_ip_range_response = PublicIpRange.list(
- self.apiclient,
- id=self.public_ip_range.vlan.id
- )
- self.debug(
- "Verify listPublicIpRanges response for public ip ranges: %s" \
- % self.public_ip_range.vlan.id
- )
- self.assertEqual(
- isinstance(list_public_ip_range_response, list),
- True,
- "Check for list Public IP range response"
- )
- public_ip_response = list_public_ip_range_response[0]
- self.assertEqual(
- public_ip_response.id,
- self.public_ip_range.vlan.id,
- "Check public ip range response id is in listVlanIpRanges"
- )
- self.debug("Dedicating Public IP range");
- self.debug("Vlan id %s" % self.public_ip_range.vlan.id);
- self.debug("Zone id %s" % self.zone.id);
- self.debug("Account name %s" % self.account.account.name);
- self.debug("Domain id %s" % self.account.account.domainid);
- dedicate_public_ip_range_response = PublicIpRange.dedicate(
- self.apiclient,
- self.public_ip_range.vlan.id,
- zoneid=self.zone.id,
- account=self.account.account.name,
- domainid=self.account.account.domainid
- )
- return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/98bc240d/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index 0e117bb..f3370eb 100644
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -1882,17 +1882,6 @@ class PublicIpRange:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVlanIpRanges(cmd))
- @classmethod
- def dedicate(cls, apiclient, id, zoneid, account=None, domainid=None, projectid=None):
- """Dedicate VLAN IP range"""
-
- cmd = dedicatePublicIpRange.dedicatePublicIpRangeCmd()
- cmd.id = id
- cmd.account = account
- cmd.domainid = domainid
- cmd.projectid = projectid
- cmd.zoneid = zoneid
- return PublicIpRange(apiclient.dedicatePublicIpRange(cmd).__dict__)
class SecondaryStorage:
"""Manage Secondary storage"""