@Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { try { resourceManager.deleteController(this); SuccessResponse response = new SuccessResponse(getCommandName()); response.setResponseName(getCommandName()); setResponseObject(response); //FIXME } catch (InvalidParameterValueException e) { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete OpenDaylight controller."); } }
@Override public void deleteController(DeleteOpenDaylightControllerCmd cmd) throws InvalidParameterValueException { OpenDaylightControllerVO controller = openDaylightControllerMappingDao.findById(cmd.getId()); if (controller == null) { throw new InvalidParameterValueException("No ODL Controller with id " + cmd.getId()); } // Find the physical network we work for Long physicalNetworkId = controller.getPhysicalNetworkId(); PhysicalNetworkVO physicalNetwork = physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork != null) { // Lets see if there are networks that use us List<NetworkVO> networkList = networkDao.listByPhysicalNetwork(physicalNetworkId); if (networkList != null) { // Networks with broadcast type lswitch are ours for (NetworkVO network : networkList) { if (network.getBroadcastDomainType() == Networks.BroadcastDomainType.OpenDaylight) { if ((network.getState() != Network.State.Shutdown) && (network.getState() != Network.State.Destroy)) { throw new CloudRuntimeException("This Controller can not be deleted as there are one or more logical networks provisioned by cloudstack."); } } } } } HostVO host = hostDao.findById(controller.getHostId()); Long hostId = host.getId(); host.setResourceState(ResourceState.Maintenance); hostDao.update(hostId, host); resourceManager.deleteHost(hostId, false, false); openDaylightControllerMappingDao.remove(cmd.getId()); }