/** @param network */ private void mockDAOs(final NetworkVO network, final NetworkOfferingVO offering) { when(_networkDao.acquireInLockTable( network.getId(), NetworkOrchestrationService.NetworkLockTimeout.value())) .thenReturn(network); when(_networksDao.acquireInLockTable( network.getId(), NetworkOrchestrationService.NetworkLockTimeout.value())) .thenReturn(network); when(_physicalProviderDao.findByServiceProvider(0L, "VirtualRouter")) .thenReturn(new PhysicalNetworkServiceProviderVO()); when(_vrProviderDao.findByNspIdAndType(0L, Type.VirtualRouter)) .thenReturn(new VirtualRouterProviderVO()); when(_networkOfferingDao.findById(0L)).thenReturn(offering); // watchit: (in this test) there can be only one when(_routerDao.getNextInSequence(Long.class, "id")).thenReturn(0L); final ServiceOfferingVO svcoff = new ServiceOfferingVO( "name", /* cpu */ 1, /* ramsize */ 1024 * 1024, /* (clock?)speed */ 1024 * 1024 * 1024, /* rateMbps */ 1, /* multicastRateMbps */ 0, /* offerHA */ false, "displayText", ProvisioningType.THIN, /* useLocalStorage */ false, /* recreatable */ false, "tags", /* systemUse */ false, VirtualMachine.Type.DomainRouter, /* defaultUse */ false); when(_serviceOfferingDao.findById(0L)).thenReturn(svcoff); final DomainRouterVO router = new DomainRouterVO( /* id */ 1L, /* serviceOfferingId */ 1L, /* elementId */ 0L, "name", /* templateId */ 0L, HypervisorType.XenServer, /* guestOSId */ 0L, /* domainId */ 0L, /* accountId */ 1L, /* userId */ 1L, /* isRedundantRouter */ false, RedundantState.UNKNOWN, /* haEnabled */ false, /* stopPending */ false, /* vpcId */ null); when(_routerDao.getNextInSequence(Long.class, "id")).thenReturn(1L); when(_templateDao.findRoutingTemplate( HypervisorType.XenServer, "SystemVM Template (XenServer)")) .thenReturn(new VMTemplateVO()); when(_routerDao.persist(any(DomainRouterVO.class))).thenReturn(router); when(_routerDao.findById(router.getId())).thenReturn(router); }
@Override public BaremetalPxeResponse getApiResponse(BaremetalPxeVO vo) { BaremetalPxeResponse response = new BaremetalPxeResponse(); response.setId(vo.getUuid()); HostVO host = _hostDao.findById(vo.getHostId()); response.setUrl(host.getPrivateIpAddress()); PhysicalNetworkServiceProviderVO providerVO = _physicalNetworkServiceProviderDao.findById(vo.getNetworkServiceProviderId()); response.setPhysicalNetworkId(providerVO.getUuid()); PhysicalNetworkVO nwVO = _physicalNetworkDao.findById(vo.getPhysicalNetworkId()); response.setPhysicalNetworkId(nwVO.getUuid()); response.setObjectName("baremetalpxeserver"); return response; }
private List<SspClient> fetchSspClients( Long physicalNetworkId, Long dataCenterId, boolean enabled_only) { ArrayList<SspClient> clients = new ArrayList<SspClient>(); boolean provider_found = false; PhysicalNetworkServiceProviderVO provider = _physicalNetworkServiceProviderDao.findByServiceProvider(physicalNetworkId, s_SSP_NAME); if (enabled_only) { if (provider != null && provider.getState() == State.Enabled) { provider_found = true; } } else { provider_found = true; } if (physicalNetworkId != null && provider_found) { SspCredentialVO credential = _sspCredentialDao.findByZone(dataCenterId); List<HostVO> hosts = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.L2Networking, dataCenterId); for (HostVO host : hosts) { assert (credential != null); _hostDao.loadDetails(host); if ("v1Api".equals(host.getDetail("sspHost"))) { clients.add( new SspClient( host.getDetail("url"), credential.getUsername(), credential.getPassword())); } } } if (clients.size() == 0) { String global_apiUrl = _configDao.getValueAndInitIfNotExist("ssp.url", "Network", null); String global_username = _configDao.getValueAndInitIfNotExist("ssp.username", "Network", null); String global_password = _configDao.getValueAndInitIfNotExist("ssp.password", "Network", null); if (global_apiUrl != null && global_username != null && global_password != null) { clients.add(new SspClient(global_apiUrl, global_username, global_password)); } } return clients; }
public DomainRouterVO deployELBVm( Network guestNetwork, DeployDestination dest, Account owner, Map<Param, Object> params) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { long dcId = dest.getDataCenter().getId(); // lock guest network Long guestNetworkId = guestNetwork.getId(); guestNetwork = _networkDao.acquireInLockTable(guestNetworkId); if (guestNetwork == null) { throw new ConcurrentOperationException("Unable to acquire network lock: " + guestNetworkId); } try { if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { owner = _accountService.getSystemAccount(); } if (s_logger.isDebugEnabled()) { s_logger.debug( "Starting a ELB vm for network configurations: " + guestNetwork + " in " + dest); } assert guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup || guestNetwork.getState() == Network.State.Implementing : "Network is not yet fully implemented: " + guestNetwork; DataCenterDeployment plan = null; DomainRouterVO elbVm = null; plan = new DataCenterDeployment(dcId, dest.getPod().getId(), null, null, null, null); if (elbVm == null) { long id = _routerDao.getNextInSequence(Long.class, "id"); if (s_logger.isDebugEnabled()) { s_logger.debug("Creating the ELB vm " + id); } List<? extends NetworkOffering> offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); NetworkOffering controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO, NicProfile>>(2); NicProfile guestNic = new NicProfile(); guestNic.setDefaultNic(true); networks.add(new Pair<NetworkVO, NicProfile>(controlConfig, null)); networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) guestNetwork, guestNic)); VMTemplateVO template = _templateDao.findSystemVMTemplate(dcId); String typeString = "ElasticLoadBalancerVm"; Long physicalNetworkId = _networkModel.getPhysicalNetworkId(guestNetwork); PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, typeString); if (provider == null) { throw new CloudRuntimeException( "Cannot find service provider " + typeString + " in physical network " + physicalNetworkId); } VirtualRouterProvider vrProvider = _vrProviderDao.findByNspIdAndType( provider.getId(), VirtualRouterProviderType.ElasticLoadBalancerVm); if (vrProvider == null) { throw new CloudRuntimeException( "Cannot find virtual router provider " + typeString + " as service provider " + provider.getId()); } elbVm = new DomainRouterVO( id, _elasticLbVmOffering.getId(), vrProvider.getId(), VirtualMachineName.getSystemVmName(id, _instance, _elbVmNamePrefix), template.getId(), template.getHypervisorType(), template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false, RedundantState.UNKNOWN, _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm, null); elbVm.setRole(Role.LB); elbVm = _itMgr.allocate(elbVm, template, _elasticLbVmOffering, networks, plan, null, owner); // TODO: create usage stats } State state = elbVm.getState(); if (state != State.Running) { elbVm = this.start( elbVm, _accountService.getSystemUser(), _accountService.getSystemAccount(), params); } return elbVm; } finally { _networkDao.releaseFromLockTable(guestNetworkId); } }
@Override @DB public BaremetalPxeVO addPxeServer(AddBaremetalPxeCmd cmd) { AddBaremetalKickStartPxeCmd kcmd = (AddBaremetalKickStartPxeCmd) cmd; PhysicalNetworkVO pNetwork = null; long zoneId; if (cmd.getPhysicalNetworkId() == null || cmd.getUrl() == null || cmd.getUsername() == null || cmd.getPassword() == null) { throw new IllegalArgumentException( "At least one of the required parameters(physical network id, url, username, password) is null"); } pNetwork = _physicalNetworkDao.findById(cmd.getPhysicalNetworkId()); if (pNetwork == null) { throw new IllegalArgumentException( "Could not find phyical network with ID: " + cmd.getPhysicalNetworkId()); } zoneId = pNetwork.getDataCenterId(); PhysicalNetworkServiceProviderVO ntwkSvcProvider = _physicalNetworkServiceProviderDao.findByServiceProvider( pNetwork.getId(), BaremetalPxeManager.BAREMETAL_PXE_SERVICE_PROVIDER.getName()); if (ntwkSvcProvider == null) { throw new CloudRuntimeException( "Network Service Provider: " + BaremetalPxeManager.BAREMETAL_PXE_SERVICE_PROVIDER.getName() + " is not enabled in the physical network: " + cmd.getPhysicalNetworkId() + "to add this device"); } else if (ntwkSvcProvider.getState() == PhysicalNetworkServiceProvider.State.Shutdown) { throw new CloudRuntimeException( "Network Service Provider: " + ntwkSvcProvider.getProviderName() + " is in shutdown state in the physical network: " + cmd.getPhysicalNetworkId() + "to add this device"); } List<HostVO> pxes = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.BaremetalPxe, zoneId); if (!pxes.isEmpty()) { throw new IllegalArgumentException("Already had a PXE server zone: " + zoneId); } String tftpDir = kcmd.getTftpDir(); if (tftpDir == null) { throw new IllegalArgumentException("No TFTP directory specified"); } URI uri; try { uri = new URI(cmd.getUrl()); } catch (Exception e) { s_logger.debug(e); throw new IllegalArgumentException(e.getMessage()); } String ipAddress = uri.getHost(); if (ipAddress == null) { ipAddress = cmd.getUrl(); } String guid = getPxeServerGuid(Long.toString(zoneId), BaremetalPxeType.KICK_START.toString(), ipAddress); ServerResource resource = null; Map params = new HashMap<String, String>(); params.put(BaremetalPxeService.PXE_PARAM_ZONE, Long.toString(zoneId)); params.put(BaremetalPxeService.PXE_PARAM_IP, ipAddress); params.put(BaremetalPxeService.PXE_PARAM_USERNAME, cmd.getUsername()); params.put(BaremetalPxeService.PXE_PARAM_PASSWORD, cmd.getPassword()); params.put(BaremetalPxeService.PXE_PARAM_TFTP_DIR, tftpDir); params.put(BaremetalPxeService.PXE_PARAM_GUID, guid); resource = new BaremetalKickStartPxeResource(); try { resource.configure("KickStart PXE resource", params); } catch (Exception e) { throw new CloudRuntimeException(e.getMessage(), e); } Host pxeServer = _resourceMgr.addHost(zoneId, resource, Host.Type.BaremetalPxe, params); if (pxeServer == null) { throw new CloudRuntimeException("Cannot add PXE server as a host"); } BaremetalPxeVO vo = new BaremetalPxeVO(); vo.setHostId(pxeServer.getId()); vo.setNetworkServiceProviderId(ntwkSvcProvider.getId()); vo.setPhysicalNetworkId(kcmd.getPhysicalNetworkId()); vo.setDeviceType(BaremetalPxeType.KICK_START.toString()); _pxeDao.persist(vo); return vo; }
@Override public CiscoVnmcController addCiscoVnmcResource(AddCiscoVnmcResourceCmd cmd) { String deviceName = Provider.CiscoVnmc.getName(); NetworkDevice networkDevice = NetworkDevice.getNetworkDevice(deviceName); Long physicalNetworkId = cmd.getPhysicalNetworkId(); CiscoVnmcController ciscoVnmcResource = null; PhysicalNetworkVO physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { throw new InvalidParameterValueException( "Could not find phyical network with ID: " + physicalNetworkId); } long zoneId = physicalNetwork.getDataCenterId(); PhysicalNetworkServiceProviderVO ntwkSvcProvider = _physicalNetworkServiceProviderDao.findByServiceProvider( physicalNetwork.getId(), networkDevice.getNetworkServiceProvder()); if (ntwkSvcProvider == null) { throw new CloudRuntimeException( "Network Service Provider: " + networkDevice.getNetworkServiceProvder() + " is not enabled in the physical network: " + physicalNetworkId + "to add this device"); } else if (ntwkSvcProvider.getState() == PhysicalNetworkServiceProvider.State.Shutdown) { throw new CloudRuntimeException( "Network Service Provider: " + ntwkSvcProvider.getProviderName() + " is in shutdown state in the physical network: " + physicalNetworkId + "to add this device"); } if (_ciscoVnmcDao.listByPhysicalNetwork(physicalNetworkId).size() != 0) { throw new CloudRuntimeException( "A Cisco Vnmc device is already configured on this physical network"); } Map<String, String> params = new HashMap<String, String>(); params.put("guid", UUID.randomUUID().toString()); params.put("zoneId", String.valueOf(physicalNetwork.getDataCenterId())); params.put("physicalNetworkId", String.valueOf(physicalNetwork.getId())); params.put("name", "Cisco VNMC Controller - " + cmd.getHost()); params.put("ip", cmd.getHost()); params.put("username", cmd.getUsername()); params.put("password", cmd.getPassword()); Map<String, Object> hostdetails = new HashMap<String, Object>(); hostdetails.putAll(params); ServerResource resource = new CiscoVnmcResource(); Transaction txn = Transaction.currentTxn(); try { resource.configure(cmd.getHost(), hostdetails); Host host = _resourceMgr.addHost(zoneId, resource, Host.Type.ExternalFirewall, params); if (host != null) { txn.start(); ciscoVnmcResource = new CiscoVnmcControllerVO( host.getId(), physicalNetworkId, ntwkSvcProvider.getProviderName(), deviceName); _ciscoVnmcDao.persist((CiscoVnmcControllerVO) ciscoVnmcResource); DetailVO detail = new DetailVO(host.getId(), "deviceid", String.valueOf(ciscoVnmcResource.getId())); _hostDetailsDao.persist(detail); txn.commit(); return ciscoVnmcResource; } else { throw new CloudRuntimeException("Failed to add Cisco Vnmc device due to internal error."); } } catch (ConfigurationException e) { txn.rollback(); throw new CloudRuntimeException(e.getMessage()); } }
@Override @DB public BaremetalPxeVO addPxeServer(AddBaremetalPxeCmd cmd) { AddBaremetalPxePingServerCmd pcmd = (AddBaremetalPxePingServerCmd) cmd; PhysicalNetworkVO pNetwork = null; long zoneId; if (cmd.getPhysicalNetworkId() == null || cmd.getUrl() == null || cmd.getUsername() == null || cmd.getPassword() == null) { throw new IllegalArgumentException( "At least one of the required parameters(physical network id, url, username, password) is null"); } pNetwork = _physicalNetworkDao.findById(cmd.getPhysicalNetworkId()); if (pNetwork == null) { throw new IllegalArgumentException( "Could not find phyical network with ID: " + cmd.getPhysicalNetworkId()); } zoneId = pNetwork.getDataCenterId(); PhysicalNetworkServiceProviderVO ntwkSvcProvider = _physicalNetworkServiceProviderDao.findByServiceProvider( pNetwork.getId(), BaremetalPxeManager.BAREMETAL_PXE_SERVICE_PROVIDER.getName()); if (ntwkSvcProvider == null) { throw new CloudRuntimeException( "Network Service Provider: " + BaremetalPxeManager.BAREMETAL_PXE_SERVICE_PROVIDER.getName() + " is not enabled in the physical network: " + cmd.getPhysicalNetworkId() + "to add this device"); } else if (ntwkSvcProvider.getState() == PhysicalNetworkServiceProvider.State.Shutdown) { throw new CloudRuntimeException( "Network Service Provider: " + ntwkSvcProvider.getProviderName() + " is in shutdown state in the physical network: " + cmd.getPhysicalNetworkId() + "to add this device"); } HostPodVO pod = _podDao.findById(cmd.getPodId()); if (pod == null) { throw new IllegalArgumentException("Could not find pod with ID: " + cmd.getPodId()); } List<HostVO> pxes = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.BaremetalPxe, null, cmd.getPodId(), zoneId); if (pxes.size() != 0) { throw new IllegalArgumentException( "Already had a PXE server in Pod: " + cmd.getPodId() + " zone: " + zoneId); } String storageServerIp = pcmd.getPingStorageServerIp(); if (storageServerIp == null) { throw new IllegalArgumentException("No IP for storage server specified"); } String pingDir = pcmd.getPingDir(); if (pingDir == null) { throw new IllegalArgumentException("No direcotry for storage server specified"); } String tftpDir = pcmd.getTftpDir(); if (tftpDir == null) { throw new IllegalArgumentException("No TFTP directory specified"); } String cifsUsername = pcmd.getPingStorageServerUserName(); if (cifsUsername == null || cifsUsername.equalsIgnoreCase("")) { cifsUsername = "******"; } String cifsPassword = pcmd.getPingStorageServerPassword(); if (cifsPassword == null || cifsPassword.equalsIgnoreCase("")) { cifsPassword = "******"; } URI uri; try { uri = new URI(cmd.getUrl()); } catch (Exception e) { s_logger.debug(e); throw new IllegalArgumentException(e.getMessage()); } String ipAddress = uri.getHost(); String guid = getPxeServerGuid( Long.toString(zoneId) + "-" + pod.getId(), BaremetalPxeType.PING.toString(), ipAddress); ServerResource resource = null; Map params = new HashMap<String, String>(); params.put(BaremetalPxeService.PXE_PARAM_ZONE, Long.toString(zoneId)); params.put(BaremetalPxeService.PXE_PARAM_POD, String.valueOf(pod.getId())); params.put(BaremetalPxeService.PXE_PARAM_IP, ipAddress); params.put(BaremetalPxeService.PXE_PARAM_USERNAME, cmd.getUsername()); params.put(BaremetalPxeService.PXE_PARAM_PASSWORD, cmd.getPassword()); params.put(BaremetalPxeService.PXE_PARAM_PING_STORAGE_SERVER_IP, storageServerIp); params.put(BaremetalPxeService.PXE_PARAM_PING_ROOT_DIR, pingDir); params.put(BaremetalPxeService.PXE_PARAM_TFTP_DIR, tftpDir); params.put(BaremetalPxeService.PXE_PARAM_PING_STORAGE_SERVER_USERNAME, cifsUsername); params.put(BaremetalPxeService.PXE_PARAM_PING_STORAGE_SERVER_PASSWORD, cifsPassword); params.put(BaremetalPxeService.PXE_PARAM_GUID, guid); resource = new BaremetalPingPxeResource(); try { resource.configure("PING PXE resource", params); } catch (Exception e) { s_logger.debug(e); throw new CloudRuntimeException(e.getMessage()); } Host pxeServer = _resourceMgr.addHost(zoneId, resource, Host.Type.BaremetalPxe, params); if (pxeServer == null) { throw new CloudRuntimeException("Cannot add PXE server as a host"); } BaremetalPxeVO vo = new BaremetalPxeVO(); Transaction txn = Transaction.currentTxn(); vo.setHostId(pxeServer.getId()); vo.setNetworkServiceProviderId(ntwkSvcProvider.getId()); vo.setPodId(pod.getId()); vo.setPhysicalNetworkId(pcmd.getPhysicalNetworkId()); vo.setDeviceType(BaremetalPxeType.PING.toString()); txn.start(); _pxeDao.persist(vo); txn.commit(); return vo; }