From 9089761165b07b22fff3c8d51f6f0ac0df1c2e7e Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 8 Mar 2019 12:55:36 +0000 Subject: [PATCH] server: allow dedicate ip range to a domain if ips are used by an accout in the domain when we dedicate public ip range to a domain but some ips are used by an account in the domain, the operation should be allowed but actually fails for now. It is because cloudstack check if ips are used by same account by account name, However, accountName is null when dedicate public ip range to a domain. Modify the code to check account id only when dedicate ip range to account. --- .../configuration/ConfigurationManagerImpl.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 9075ee903a5a..d0230755d47a 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3601,9 +3601,9 @@ public boolean deleteVlanAndPublicIpRange(final long userId, final long vlanDbId } boolean isDomainSpecific = false; - List domainVln = _domainVlanMapDao.listDomainVlanMapsByVlan(vlanRange.getId()); + List domainVlan = _domainVlanMapDao.listDomainVlanMapsByVlan(vlanRange.getId()); // Check for domain wide pool. It will have an entry for domain_vlan_map. - if (domainVln != null && !domainVln.isEmpty()) { + if (domainVlan != null && !domainVlan.isEmpty()) { isDomainSpecific = true; } @@ -3760,10 +3760,10 @@ public Vlan dedicatePublicIpRange(final DedicatePublicIpRangeCmd cmd) throws Res forSystemVms = ip.isForSystemVms(); final Long allocatedToAccountId = ip.getAllocatedToAccountId(); if (allocatedToAccountId != null) { - final Account accountAllocatedTo = _accountMgr.getActiveAccountById(allocatedToAccountId); - if (!accountAllocatedTo.getAccountName().equalsIgnoreCase(accountName)) { + if (vlanOwner != null && allocatedToAccountId != vlanOwner.getId()) { throw new InvalidParameterValueException(ip.getAddress() + " Public IP address in range is allocated to another account "); } + final Account accountAllocatedTo = _accountMgr.getActiveAccountById(allocatedToAccountId); if (vlanOwner == null && domain != null && domain.getId() != accountAllocatedTo.getDomainId()){ throw new InvalidParameterValueException(ip.getAddress() + " Public IP address in range is allocated to another domain/account "); @@ -3824,9 +3824,9 @@ public boolean releasePublicIpRange(final long vlanDbId, final long userId, fina } boolean isDomainSpecific = false; - final List domainVln = _domainVlanMapDao.listDomainVlanMapsByVlan(vlanDbId); + final List domainVlan = _domainVlanMapDao.listDomainVlanMapsByVlan(vlanDbId); // Check for domain wide pool. It will have an entry for domain_vlan_map. - if (domainVln != null && !domainVln.isEmpty()) { + if (domainVlan != null && !domainVlan.isEmpty()) { isDomainSpecific = true; } @@ -3879,7 +3879,7 @@ public boolean releasePublicIpRange(final long vlanDbId, final long userId, fina // decrement resource count for dedicated public ip's _resourceLimitMgr.decrementResourceCount(acctVln.get(0).getAccountId(), ResourceType.public_ip, new Long(ips.size())); return true; - } else if (isDomainSpecific && _domainVlanMapDao.remove(domainVln.get(0).getId())) { + } else if (isDomainSpecific && _domainVlanMapDao.remove(domainVlan.get(0).getId())) { s_logger.debug("Remove the vlan from domain_vlan_map successfully."); return true; } else {