From 1fe3bc066bebd75b54dcda3cb16a151724742eb0 Mon Sep 17 00:00:00 2001 From: alena Date: Thu, 3 Nov 2011 11:44:57 -0700 Subject: [PATCH] Allow disassociating sourceNat ip address when SourceNat service is not supported by corresponding network any longer (can be disabled during the network offering upgrade) --- api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java | 5 +++++ server/src/com/cloud/network/NetworkManagerImpl.java | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java index 0714fecbbcc..f092f9953a0 100644 --- a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java @@ -30,6 +30,7 @@ import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.IpAddress; +import com.cloud.user.Account; import com.cloud.user.UserContext; @Implementation(description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) @@ -96,6 +97,10 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { } ownerId = ip.getAccountId(); } + + if (ownerId == null) { + return Account.ACCOUNT_ID_SYSTEM; + } return ownerId; } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index be9bb10c87c..9836980c1ba 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1588,8 +1588,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (ipVO.getAllocatedToAccountId() != null) { _accountMgr.checkAccess(caller, null, ipVO); } + + Network associatedNetwork = getNetwork(ipVO.getAssociatedWithNetworkId()); - if (ipVO.isSourceNat()) { + if (isServiceSupportedByNetworkOffering(associatedNetwork.getNetworkOfferingId(), Service.SourceNat)) { throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); }