From 724b8d80bdc1c6adbcd874c50bf720c6f4c720dd Mon Sep 17 00:00:00 2001 From: alena Date: Mon, 20 Dec 2010 20:19:47 -0800 Subject: [PATCH] Don't allow to remove a network with deleteNetwork api when the network has active nics assigned --- api/src/com/cloud/api/commands/DeleteNetworkCmd.java | 6 ++++++ api/src/com/cloud/network/NetworkService.java | 2 ++ server/src/com/cloud/network/NetworkManagerImpl.java | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java index 755f9ffd1f8..2885a151031 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java @@ -26,6 +26,7 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; +import com.cloud.exception.InvalidParameterValueException; @Implementation(description="Deletes a network", responseObject=SuccessResponse.class) public class DeleteNetworkCmd extends BaseCmd{ @@ -60,6 +61,11 @@ public class DeleteNetworkCmd extends BaseCmd{ @Override public void execute(){ + //Don't allow to delete network via api call when it has vms assigned to it + int nicCount = _networkService.getActiveNicsInNetwork(id); + if (nicCount > 0) { + throw new InvalidParameterValueException("Unable to remove the network id=" + id + " as it has active Nics."); + } boolean result = _networkService.deleteNetwork(id); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index b075ff34565..6404cb0d402 100644 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -88,4 +88,6 @@ public interface NetworkService { boolean deleteNetwork(long networkId) throws InvalidParameterValueException, PermissionDeniedException; boolean restartNetwork(RestartNetworkCmd cmd) throws ConcurrentOperationException; + + int getActiveNicsInNetwork(long networkId); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index fc13dfc044e..341bbefe488 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2116,4 +2116,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return success; } + + @Override + public int getActiveNicsInNetwork(long networkId) { + return _networksDao.getActiveNicsIn(networkId); + } }