private void updateNetworkLabels(HostVO host) { // check if networkLabels need to be updated in details // we send only private and storage network label to the resource. String privateNetworkLabel = _networkMgr.getDefaultManagementTrafficLabel( host.getDataCenterId(), host.getHypervisorType()); String storageNetworkLabel = _networkMgr.getDefaultStorageTrafficLabel(host.getDataCenterId(), host.getHypervisorType()); String privateDevice = host.getDetail("private.network.device"); String storageDevice = host.getDetail("storage.network.device1"); boolean update = false; if (privateNetworkLabel != null && !privateNetworkLabel.equalsIgnoreCase(privateDevice)) { host.setDetail("private.network.device", privateNetworkLabel); update = true; } if (storageNetworkLabel != null && !storageNetworkLabel.equalsIgnoreCase(storageDevice)) { host.setDetail("storage.network.device1", storageNetworkLabel); update = true; } if (update) { _hostDao.saveDetails(host); } }
protected HashMap<String, Object> buildConfigParams(HostVO host) { HashMap<String, Object> params = new HashMap<String, Object>(host.getDetails().size() + 5); params.putAll(host.getDetails()); params.put("guid", host.getGuid()); params.put("zone", Long.toString(host.getDataCenterId())); if (host.getPodId() != null) { params.put("pod", Long.toString(host.getPodId())); } if (host.getClusterId() != null) { params.put("cluster", Long.toString(host.getClusterId())); String guid = null; ClusterVO cluster = _clusterDao.findById(host.getClusterId()); if (cluster.getGuid() == null) { guid = host.getDetail("pool"); } else { guid = cluster.getGuid(); } if (guid != null && !guid.isEmpty()) { params.put("pool", guid); } } params.put("ipaddress", host.getPrivateIpAddress()); params.put("secondary.storage.vm", "false"); params.put( "max.template.iso.size", _configDao.getValue(Config.MaxTemplateAndIsoSize.toString())); params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString())); return params; }
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; }
@Override public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) { StartupCommand firstCmd = cmd[0]; if (!(firstCmd instanceof StartupRoutingCommand)) { return null; } StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd); if (ssCmd.getHypervisorType() != HypervisorType.KVM) { return null; } /* KVM requires host are the same in cluster */ ClusterVO clusterVO = _clusterDao.findById(host.getClusterId()); List<HostVO> hostsInCluster = _resourceMgr.listAllHostsInCluster(clusterVO.getId()); if (!hostsInCluster.isEmpty()) { HostVO oneHost = hostsInCluster.get(0); _hostDao.loadDetails(oneHost); String hostOsInCluster = oneHost.getDetail("Host.OS"); String hostOs = ssCmd.getHostDetails().get("Host.OS"); if (!hostOsInCluster.equalsIgnoreCase(hostOs)) { throw new IllegalArgumentException( "Can't add host: " + firstCmd.getPrivateIpAddress() + " with hostOS: " + hostOs + " into a cluster," + "in which there are " + hostOsInCluster + " hosts added"); } } _hostDao.loadDetails(host); return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.KVM, host.getDetails(), null); }
@Override public Network implement( final Network network, final NetworkOffering offering, final DeployDestination dest, final ReservationContext context) throws InsufficientVirtualNetworkCapacityException { assert network.getState() == State.Implementing : "Why are we implementing " + network; final long dcId = dest.getDataCenter().getId(); Long physicalNetworkId = network.getPhysicalNetworkId(); // physical network id can be null in Guest Network in Basic zone, so locate the physical // network if (physicalNetworkId == null) { physicalNetworkId = networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); } final NetworkVO implemented = new NetworkVO( network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter()); if (network.getGateway() != null) { implemented.setGateway(network.getGateway()); } if (network.getCidr() != null) { implemented.setCidr(network.getCidr()); } // Name is either the given name or the uuid String name = network.getName(); if (name == null || name.isEmpty()) { name = ((NetworkVO) network).getUuid(); } if (name.length() > MAX_NAME_LENGTH) { name = name.substring(0, MAX_NAME_LENGTH - 1); } final List<NiciraNvpDeviceVO> devices = niciraNvpDao.listByPhysicalNetwork(physicalNetworkId); if (devices.isEmpty()) { s_logger.error("No NiciraNvp Controller on physical network " + physicalNetworkId); return null; } final NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); final HostVO niciraNvpHost = hostDao.findById(niciraNvpDevice.getHostId()); hostDao.loadDetails(niciraNvpHost); final String transportzoneuuid = niciraNvpHost.getDetail("transportzoneuuid"); final String transportzoneisotype = niciraNvpHost.getDetail("transportzoneisotype"); final CreateLogicalSwitchCommand cmd = new CreateLogicalSwitchCommand( transportzoneuuid, transportzoneisotype, name, context.getDomain().getName() + "-" + context.getAccount().getAccountName()); final CreateLogicalSwitchAnswer answer = (CreateLogicalSwitchAnswer) agentMgr.easySend(niciraNvpHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("CreateLogicalSwitchCommand failed"); return null; } try { implemented.setBroadcastUri(new URI("lswitch", answer.getLogicalSwitchUuid(), null)); implemented.setBroadcastDomainType(BroadcastDomainType.Lswitch); s_logger.info( "Implemented OK, network linked to = " + implemented.getBroadcastUri().toString()); } catch (final URISyntaxException e) { s_logger.error( "Unable to store logical switch id in broadcast uri, uuid = " + implemented.getUuid(), e); return null; } return implemented; }
@Override public Host addSspHost(AddSspCmd cmd) { SspClient client = new SspClient(cmd.getUrl(), cmd.getUsername(), cmd.getPassword()); if (!client.login()) { throw new CloudRuntimeException("Ssp login failed."); } long zoneId = cmd.getZoneId(); SspCredentialVO credential = _sspCredentialDao.findByZone(zoneId); if (credential == null) { if (cmd.getUsername() == null || cmd.getPassword() == null) { throw new InvalidParameterValueException("Initial credential required for zone: " + zoneId); } credential = new SspCredentialVO(); credential.setZoneId(zoneId); credential.setUsername(cmd.getUsername()); credential.setPassword(cmd.getPassword()); _sspCredentialDao.persist(credential); } else { if (cmd.getUsername() != null || cmd.getPassword() != null) { s_logger.warn("Tenant credential already configured for zone:" + zoneId); } } String tenantUuid = _sspTenantDao.findUuidByZone(zoneId); if (tenantUuid == null) { if (cmd.getTenantUuid() == null) { throw new InvalidParameterValueException( "Initial tenant uuid required for zone: " + zoneId); } SspTenantVO tenant = new SspTenantVO(); tenant.setZoneId(zoneId); tenant.setUuid(cmd.getTenantUuid()); _sspTenantDao.persist(tenant); } else { if (cmd.getTenantUuid() != null) { s_logger.warn("Tenant uuid already configured for zone:" + zoneId); } } String normalizedUrl = null; String hostname = null; try { URL url = new URL(cmd.getUrl()); normalizedUrl = url.toString(); hostname = url.getHost(); } catch (MalformedURLException e1) { throw new CloudRuntimeException("Invalid url " + cmd.getUrl()); } List<HostVO> hosts = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.L2Networking, zoneId); for (HostVO host : hosts) { assert (credential != null); _hostDao.loadDetails(host); if ("v1Api".equals(host.getDetail("sspHost"))) { if (normalizedUrl.equals(host.getDetail("url"))) { s_logger.warn("Ssp host already registered " + normalizedUrl); return host; } } } // SspHost HostVO will be created per zone and url. HostVO host = new HostVO(UUID.randomUUID().toString()); host.setDataCenterId(zoneId); host.setType(Host.Type.L2Networking); host.setPrivateIpAddress(hostname); // db schema not null. It may be a name, not IP address. // host.setPrivateMacAddress(""); // db schema nullable // host.setPrivateNetmask(""); // db schema nullable host.setVersion("1"); // strange db schema not null host.setName(cmd.getName()); host.setDetails(new HashMap<String, String>()); host.setDetail("sspHost", "v1Api"); host.setDetail("url", normalizedUrl); return _hostDao.persist(host); }