@Override public boolean shutdown(final Network network, final ReservationContext context, final boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { final List<DomainRouterVO> routers = getRouters(network); if (routers == null || routers.isEmpty()) { return true; } boolean stopResult = true; boolean destroyResult = true; for (final DomainRouterVO router : routers) { stopResult = stopResult && _routerMgr.stop(router, false, context.getCaller(), context.getAccount()) != null; if (!stopResult) { s_logger.warn("Failed to stop virtual router element " + router + ", but would try to process clean up anyway."); } if (cleanup) { destroyResult = destroyResult && _routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null; if (!destroyResult) { s_logger.warn("Failed to clean up virtual router element " + router); } } } return stopResult & destroyResult; }
@Override public boolean destroy(final Network config, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(config.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { return true; } boolean result = true; // NOTE that we need to pass caller account to destroyRouter, otherwise // it will fail permission check there. Context passed in from // deleteNetwork is the network account, // not caller account final Account callerAccount = _accountMgr.getAccount(context.getCaller().getAccountId()); for (final DomainRouterVO router : routers) { result = result && _routerMgr.destroyRouter(router.getId(), callerAccount, context.getCaller().getId()) != null; } return result; }
@Override public boolean destroy(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { List<? extends VirtualRouter> internalLbVms = _routerDao.listByNetworkAndRole(network.getId(), Role.INTERNAL_LB_VM); if (internalLbVms == null || internalLbVms.isEmpty()) { return true; } boolean result = true; for (VirtualRouter internalLbVm : internalLbVms) { result = result && (_internalLbMgr.destroyInternalLbVm(internalLbVm.getId(), context.getAccount(), context.getCaller().getId())); } return result; }
@Override public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { List<? extends VirtualRouter> internalLbVms = _routerDao.listByNetworkAndRole(network.getId(), Role.INTERNAL_LB_VM); if (internalLbVms == null || internalLbVms.isEmpty()) { return true; } boolean result = true; for (VirtualRouter internalLbVm : internalLbVms) { result = result && _internalLbMgr.destroyInternalLbVm(internalLbVm.getId(), context.getAccount(), context.getCaller().getId()); if (cleanup) { if (!result) { s_logger.warn("Failed to stop internal lb element " + internalLbVm + ", but would try to process clean up anyway."); } result = (_internalLbMgr.destroyInternalLbVm(internalLbVm.getId(), context.getAccount(), context.getCaller().getId())); if (!result) { s_logger.warn("Failed to clean up internal lb element " + internalLbVm); } } } return result; }
@Override public boolean shutdownVpc(final Vpc vpc, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { final List<DomainRouterVO> routers = _routerDao.listByVpcId(vpc.getId()); if (routers == null || routers.isEmpty()) { return true; } boolean result = true; for (final DomainRouterVO router : routers) { result = result && _routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null; } return result; }
@Override public void destroyExpendableRouters(final List<? extends VirtualRouter> routers, final ReservationContext context) throws ResourceUnavailableException { final List<VirtualRouter> remainingRouters = new ArrayList<>(); for (final VirtualRouter router : routers) { if (router.getState() == VirtualMachine.State.Stopped || router.getState() == VirtualMachine.State.Error || router.getState() == VirtualMachine.State.Shutdowned || router.getState() == VirtualMachine.State.Unknown) { s_logger.debug("Destroying old router " + router); _routerService.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()); } else { remainingRouters.add(router); } } if (remainingRouters.size() < 2) { return; } VirtualRouter backupRouter = null; for (final VirtualRouter router : remainingRouters) { if (router.getRedundantState() == VirtualRouter.RedundantState.BACKUP) { backupRouter = router; } } if (backupRouter == null) { backupRouter = routers.get(routers.size() - 1); } if (backupRouter != null) { _routerService.destroyRouter(backupRouter.getId(), context.getAccount(), context.getCaller().getId()); } }
cleanupResult = shutdownNetworkResources(network.getId(), context.getAccount(), context.getCaller().getId());
@Override public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), Type.InternalLbVm); if (element == null) { return true; } long elementId = element.getId(); List<DomainRouterVO> internalLbVms = _routerDao.listByElementId(elementId); boolean result = true; for (DomainRouterVO internalLbVm : internalLbVms) { result = result && (_internalLbMgr.destroyInternalLbVm(internalLbVm.getId(), context.getAccount(), context.getCaller().getId())); } _vrProviderDao.remove(elementId); return result; }
if (!cleanupNetworkResources(networkId, callerAccount, context.getCaller().getId())) { s_logger.warn("Unable to delete network id=" + networkId + ": failed to cleanup network resources"); return false;
_routerService.destroyRouter(oldRouter.getId(), context.getAccount(), context.getCaller().getId());
@Override public boolean shutdownProviderInstances(final PhysicalNetworkServiceProvider provider, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { final VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), getVirtualRouterProvider()); if (element == null) { return true; } // Find domain routers final long elementId = element.getId(); final List<DomainRouterVO> routers = _routerDao.listByElementId(elementId); boolean result = true; for (final DomainRouterVO router : routers) { result = result && _routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null; } _vrProviderDao.remove(elementId); return result; }
_routerService.destroyRouter(oldRouter.getId(), context.getAccount(), context.getCaller().getId());
if (!deleteVlansInNetwork(networkFinal.getId(), context.getCaller().getId(), callerAccount)) { s_logger.warn("Failed to delete network " + networkFinal + "; was unable to cleanup corresponding ip ranges"); throw new CloudRuntimeException("Failed to delete network " + networkFinal + "; was unable to cleanup corresponding ip ranges");