@Override public long getEntityOwnerId() { VirtualRouter router = _entityMgr.findById(VirtualRouter.class, getId()); if (router != null) { return router.getAccountId(); } return Account .ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events // are tracked }
private Boolean testUserVM(VirtualMachine vm, Nic nic, VirtualRouter router) { String privateIp = nic.getIp4Address(); String routerPrivateIp = router.getPrivateIpAddress(); List<Long> otherHosts = new ArrayList<Long>(); if (vm.getHypervisorType() == HypervisorType.XenServer || vm.getHypervisorType() == HypervisorType.KVM) { otherHosts.add(router.getHostId()); } else { otherHosts = findHostByPod(router.getPodIdToDeployIn(), null); } for (Long hostId : otherHosts) { try { Answer pingTestAnswer = _agentMgr.easySend(hostId, new PingTestCommand(routerPrivateIp, privateIp)); if (pingTestAnswer != null && pingTestAnswer.getResult()) { if (s_logger.isDebugEnabled()) { s_logger.debug( "user vm's " + vm.getHostName() + " ip address " + privateIp + " has been successfully pinged from the Virtual Router " + router.getHostName() + ", returning that vm is alive"); } return Boolean.TRUE; } } catch (Exception e) { if (s_logger.isDebugEnabled()) { s_logger.debug("Couldn't reach due to", e); } continue; } } if (s_logger.isDebugEnabled()) { s_logger.debug(vm + " could not be pinged, returning that it is unknown"); } return null; }
@Override @DB public void addRouterToGuestNetwork(VirtualRouter router, Network guestNetwork) { if (_routerNetworkDao.findByRouterAndNetwork(router.getId(), guestNetwork.getId()) == null) { NetworkOffering off = _offDao.findById(guestNetwork.getNetworkOfferingId()); if (!(off.getName().equalsIgnoreCase(NetworkOffering.SystemPrivateGatewayNetworkOffering))) { TransactionLegacy txn = TransactionLegacy.currentTxn(); txn.start(); // 1) add router to network RouterNetworkVO routerNtwkMap = new RouterNetworkVO(router.getId(), guestNetwork.getId(), guestNetwork.getGuestType()); _routerNetworkDao.persist(routerNtwkMap); // 2) create user stats entry for the network UserStatisticsVO stats = _userStatsDao.findBy( router.getAccountId(), router.getDataCenterId(), guestNetwork.getId(), null, router.getId(), router.getType().toString()); if (stats == null) { stats = new UserStatisticsVO( router.getAccountId(), router.getDataCenterId(), null, router.getId(), router.getType().toString(), guestNetwork.getId()); _userStatsDao.persist(stats); } txn.commit(); } } }
@Override public boolean applyStaticRoutes( final List<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> routers) throws ResourceUnavailableException { s_logger.debug("APPLYING STATIC ROUTES RULES"); if (staticRoutes == null || staticRoutes.isEmpty()) { s_logger.debug("No static routes to apply"); return true; } final StaticRoutesRules routesRules = new StaticRoutesRules(staticRoutes); boolean result = true; for (final VirtualRouter router : routers) { if (router.getState() == State.Running) { result = result && routesRules.accept(_advancedVisitor, router); } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) { s_logger.debug( "Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending StaticRoute command to the backend"); } else { s_logger.warn( "Unable to apply StaticRoute, virtual router is not in the right state " + router.getState()); throw new ResourceUnavailableException( "Unable to apply StaticRoute on the backend," + " virtual router is not in the right state", DataCenter.class, router.getDataCenterId()); } } return result; }