Search in sources :

Example 96 with Host

use of com.cloud.host.Host in project cloudstack by apache.

the class FirstFitAllocator method reorderHostsByCapacity.

// Reorder hosts in the decreasing order of free capacity.
private List<? extends Host> reorderHostsByCapacity(DeploymentPlan plan, List<? extends Host> hosts) {
    Long clusterId = plan.getClusterId();
    //Get capacity by which we should reorder
    String capacityTypeToOrder = _configDao.getValue(Config.HostCapacityTypeToOrderClusters.key());
    short capacityType = CapacityVO.CAPACITY_TYPE_CPU;
    if ("RAM".equalsIgnoreCase(capacityTypeToOrder)) {
        capacityType = CapacityVO.CAPACITY_TYPE_MEMORY;
    }
    List<Long> hostIdsByFreeCapacity = _capacityDao.orderHostsByFreeCapacity(clusterId, capacityType);
    if (s_logger.isDebugEnabled()) {
        s_logger.debug("List of hosts in descending order of free capacity in the cluster: " + hostIdsByFreeCapacity);
    }
    //now filter the given list of Hosts by this ordered list
    Map<Long, Host> hostMap = new HashMap<Long, Host>();
    for (Host host : hosts) {
        hostMap.put(host.getId(), host);
    }
    List<Long> matchingHostIds = new ArrayList<Long>(hostMap.keySet());
    hostIdsByFreeCapacity.retainAll(matchingHostIds);
    List<Host> reorderedHosts = new ArrayList<Host>();
    for (Long id : hostIdsByFreeCapacity) {
        reorderedHosts.add(hostMap.get(id));
    }
    return reorderedHosts;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Host(com.cloud.host.Host)

Example 97 with Host

use of com.cloud.host.Host in project cloudstack by apache.

the class FirstFitAllocator method prioritizeHosts.

protected List<? extends Host> prioritizeHosts(VMTemplateVO template, ServiceOffering offering, List<? extends Host> hosts) {
    if (template == null) {
        return hosts;
    }
    // Determine the guest OS category of the template
    String templateGuestOSCategory = getTemplateGuestOSCategory(template);
    List<Host> prioritizedHosts = new ArrayList<Host>();
    List<Host> noHvmHosts = new ArrayList<Host>();
    // If a template requires HVM and a host doesn't support HVM, remove it from consideration
    List<Host> hostsToCheck = new ArrayList<Host>();
    if (template.isRequiresHvm()) {
        for (Host host : hosts) {
            if (hostSupportsHVM(host)) {
                hostsToCheck.add(host);
            } else {
                noHvmHosts.add(host);
            }
        }
    } else {
        hostsToCheck.addAll(hosts);
    }
    if (s_logger.isDebugEnabled()) {
        if (noHvmHosts.size() > 0) {
            s_logger.debug("Not considering hosts: " + noHvmHosts + "  to deploy template: " + template + " as they are not HVM enabled");
        }
    }
    // If a host is tagged with the same guest OS category as the template, move it to a high priority list
    // If a host is tagged with a different guest OS category than the template, move it to a low priority list
    List<Host> highPriorityHosts = new ArrayList<Host>();
    List<Host> lowPriorityHosts = new ArrayList<Host>();
    for (Host host : hostsToCheck) {
        String hostGuestOSCategory = getHostGuestOSCategory(host);
        if (hostGuestOSCategory == null) {
            continue;
        } else if (templateGuestOSCategory.equals(hostGuestOSCategory)) {
            highPriorityHosts.add(host);
        } else {
            lowPriorityHosts.add(host);
        }
    }
    hostsToCheck.removeAll(highPriorityHosts);
    hostsToCheck.removeAll(lowPriorityHosts);
    // Prioritize the remaining hosts by HVM capability
    for (Host host : hostsToCheck) {
        if (!template.isRequiresHvm() && !hostSupportsHVM(host)) {
            // Host and template both do not support hvm, put it as first consideration
            prioritizedHosts.add(0, host);
        } else {
            // Template doesn't require hvm, but the machine supports it, make it last for consideration
            prioritizedHosts.add(host);
        }
    }
    // Merge the lists
    prioritizedHosts.addAll(0, highPriorityHosts);
    prioritizedHosts.addAll(lowPriorityHosts);
    // if service offering is not GPU enabled then move all the GPU enabled hosts to the end of priority list.
    if (_serviceOfferingDetailsDao.findDetail(offering.getId(), GPU.Keys.vgpuType.toString()) == null) {
        List<Host> gpuEnabledHosts = new ArrayList<Host>();
        // Check for GPU enabled hosts.
        for (Host host : prioritizedHosts) {
            if (_resourceMgr.isHostGpuEnabled(host.getId())) {
                gpuEnabledHosts.add(host);
            }
        }
        // Move GPU enabled hosts to the end of list
        if (!gpuEnabledHosts.isEmpty()) {
            prioritizedHosts.removeAll(gpuEnabledHosts);
            prioritizedHosts.addAll(gpuEnabledHosts);
        }
    }
    return prioritizedHosts;
}
Also used : ArrayList(java.util.ArrayList) Host(com.cloud.host.Host)

Example 98 with Host

use of com.cloud.host.Host in project cloudstack by apache.

the class NetscalerElement method createNetscalerLoadBalancerResponse.

@Override
public NetscalerLoadBalancerResponse createNetscalerLoadBalancerResponse(ExternalLoadBalancerDeviceVO lbDeviceVO) {
    NetscalerLoadBalancerResponse response = new NetscalerLoadBalancerResponse();
    Host lbHost = _hostDao.findById(lbDeviceVO.getHostId());
    Map<String, String> lbDetails = _detailsDao.findDetails(lbDeviceVO.getHostId());
    response.setId(lbDeviceVO.getUuid());
    response.setIpAddress(lbHost.getPrivateIpAddress());
    PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(lbDeviceVO.getPhysicalNetworkId());
    if (pnw != null) {
        response.setPhysicalNetworkId(pnw.getUuid());
    }
    response.setPublicInterface(lbDetails.get("publicInterface"));
    response.setPrivateInterface(lbDetails.get("privateInterface"));
    response.setDeviceName(lbDeviceVO.getDeviceName());
    if (lbDeviceVO.getCapacity() == 0) {
        long defaultLbCapacity = NumbersUtil.parseLong(_configDao.getValue(Config.DefaultExternalLoadBalancerCapacity.key()), 50);
        response.setDeviceCapacity(defaultLbCapacity);
    } else {
        response.setDeviceCapacity(lbDeviceVO.getCapacity());
    }
    response.setDedicatedLoadBalancer(lbDeviceVO.getIsDedicatedDevice());
    response.setProvider(lbDeviceVO.getProviderName());
    response.setDeviceState(lbDeviceVO.getState().name());
    response.setObjectName("netscalerloadbalancer");
    response.setGslbProvider(lbDeviceVO.getGslbProvider());
    response.setExclusiveGslbProvider(lbDeviceVO.getExclusiveGslbProvider());
    response.setGslbSitePublicIp(lbDeviceVO.getGslbSitePublicIP());
    response.setGslbSitePrivateIp(lbDeviceVO.getGslbSitePrivateIP());
    List<Long> associatedPods = new ArrayList<Long>();
    List<NetScalerPodVO> currentPodVOs = _netscalerPodDao.listByNetScalerDeviceId(lbDeviceVO.getId());
    if (currentPodVOs != null && currentPodVOs.size() > 0) {
        for (NetScalerPodVO nsPodVo : currentPodVOs) {
            associatedPods.add(nsPodVo.getPodId());
        }
    }
    response.setAssociatedPods(associatedPods);
    return response;
}
Also used : PhysicalNetwork(com.cloud.network.PhysicalNetwork) NetscalerLoadBalancerResponse(com.cloud.api.response.NetscalerLoadBalancerResponse) ArrayList(java.util.ArrayList) Host(com.cloud.host.Host) NetScalerPodVO(com.cloud.network.NetScalerPodVO)

Example 99 with Host

use of com.cloud.host.Host in project cloudstack by apache.

the class ApiResponseHelper method createSystemVmResponse.

@Override
public SystemVmResponse createSystemVmResponse(VirtualMachine vm) {
    SystemVmResponse vmResponse = new SystemVmResponse();
    if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy || vm.getType() == Type.DomainRouter) {
        // SystemVm vm = (SystemVm) systemVM;
        vmResponse.setId(vm.getUuid());
        // vmResponse.setObjectId(vm.getId());
        vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
        vmResponse.setName(vm.getHostName());
        if (vm.getPodIdToDeployIn() != null) {
            HostPodVO pod = ApiDBUtils.findPodById(vm.getPodIdToDeployIn());
            if (pod != null) {
                vmResponse.setPodId(pod.getUuid());
            }
        }
        VMTemplateVO template = ApiDBUtils.findTemplateById(vm.getTemplateId());
        if (template != null) {
            vmResponse.setTemplateId(template.getUuid());
        }
        vmResponse.setCreated(vm.getCreated());
        if (vm.getHostId() != null) {
            Host host = ApiDBUtils.findHostById(vm.getHostId());
            if (host != null) {
                vmResponse.setHostId(host.getUuid());
                vmResponse.setHostName(host.getName());
                vmResponse.setHypervisor(host.getHypervisorType().toString());
            }
        }
        if (vm.getState() != null) {
            vmResponse.setState(vm.getState().toString());
        }
        // for console proxies, add the active sessions
        if (vm.getType() == Type.ConsoleProxy) {
            ConsoleProxyVO proxy = ApiDBUtils.findConsoleProxy(vm.getId());
            // proxy can be already destroyed
            if (proxy != null) {
                vmResponse.setActiveViewerSessions(proxy.getActiveSession());
            }
        }
        DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterId());
        if (zone != null) {
            vmResponse.setZoneId(zone.getUuid());
            vmResponse.setZoneName(zone.getName());
            vmResponse.setDns1(zone.getDns1());
            vmResponse.setDns2(zone.getDns2());
        }
        List<NicProfile> nicProfiles = ApiDBUtils.getNics(vm);
        for (NicProfile singleNicProfile : nicProfiles) {
            Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
            if (network != null) {
                if (network.getTrafficType() == TrafficType.Management) {
                    vmResponse.setPrivateIp(singleNicProfile.getIPv4Address());
                    vmResponse.setPrivateMacAddress(singleNicProfile.getMacAddress());
                    vmResponse.setPrivateNetmask(singleNicProfile.getIPv4Netmask());
                } else if (network.getTrafficType() == TrafficType.Control) {
                    vmResponse.setLinkLocalIp(singleNicProfile.getIPv4Address());
                    vmResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
                    vmResponse.setLinkLocalNetmask(singleNicProfile.getIPv4Netmask());
                } else if (network.getTrafficType() == TrafficType.Public) {
                    vmResponse.setPublicIp(singleNicProfile.getIPv4Address());
                    vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
                    vmResponse.setPublicNetmask(singleNicProfile.getIPv4Netmask());
                    vmResponse.setGateway(singleNicProfile.getIPv4Gateway());
                } else if (network.getTrafficType() == TrafficType.Guest) {
                    /*
                          * In basic zone, public ip has TrafficType.Guest in case EIP service is not enabled.
                          * When EIP service is enabled in the basic zone, system VM by default get the public
                          * IP allocated for EIP. So return the guest/public IP accordingly.
                          * */
                    NetworkOffering networkOffering = ApiDBUtils.findNetworkOfferingById(network.getNetworkOfferingId());
                    if (networkOffering.getElasticIp()) {
                        IpAddress ip = ApiDBUtils.findIpByAssociatedVmId(vm.getId());
                        if (ip != null) {
                            Vlan vlan = ApiDBUtils.findVlanById(ip.getVlanId());
                            vmResponse.setPublicIp(ip.getAddress().addr());
                            vmResponse.setPublicNetmask(vlan.getVlanNetmask());
                            vmResponse.setGateway(vlan.getVlanGateway());
                        }
                    } else {
                        vmResponse.setPublicIp(singleNicProfile.getIPv4Address());
                        vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
                        vmResponse.setPublicNetmask(singleNicProfile.getIPv4Netmask());
                        vmResponse.setGateway(singleNicProfile.getIPv4Gateway());
                    }
                }
            }
        }
    }
    vmResponse.setObjectName("systemvm");
    return vmResponse;
}
Also used : SystemVmResponse(org.apache.cloudstack.api.response.SystemVmResponse) DataCenter(com.cloud.dc.DataCenter) NetworkOffering(com.cloud.offering.NetworkOffering) Network(com.cloud.network.Network) PhysicalNetwork(com.cloud.network.PhysicalNetwork) VMTemplateVO(com.cloud.storage.VMTemplateVO) Host(com.cloud.host.Host) ConsoleProxyVO(com.cloud.vm.ConsoleProxyVO) IpAddress(com.cloud.network.IpAddress) Vlan(com.cloud.dc.Vlan) GuestVlan(com.cloud.network.GuestVlan) NicProfile(com.cloud.vm.NicProfile) HostPodVO(com.cloud.dc.HostPodVO)

Example 100 with Host

use of com.cloud.host.Host in project cloudstack by apache.

the class ApiResponseHelper method createSystemVmInstanceResponse.

@Override
public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) {
    SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse();
    vmResponse.setId(vm.getUuid());
    vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
    vmResponse.setName(vm.getHostName());
    if (vm.getHostId() != null) {
        Host host = ApiDBUtils.findHostById(vm.getHostId());
        if (host != null) {
            vmResponse.setHostId(host.getUuid());
        }
    }
    if (vm.getState() != null) {
        vmResponse.setState(vm.getState().toString());
    }
    if (vm.getType() == Type.DomainRouter) {
        VirtualRouter router = (VirtualRouter) vm;
        if (router.getRole() != null) {
            vmResponse.setRole(router.getRole().toString());
        }
    }
    vmResponse.setObjectName("systemvminstance");
    return vmResponse;
}
Also used : SystemVmInstanceResponse(org.apache.cloudstack.api.response.SystemVmInstanceResponse) Host(com.cloud.host.Host) VirtualRouter(com.cloud.network.router.VirtualRouter)

Aggregations

Host (com.cloud.host.Host)112 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)37 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)31 ArrayList (java.util.ArrayList)31 HashMap (java.util.HashMap)29 ServerApiException (org.apache.cloudstack.api.ServerApiException)20 ConfigurationException (javax.naming.ConfigurationException)17 ResourceUnavailableException (com.cloud.exception.ResourceUnavailableException)16 PhysicalNetworkVO (com.cloud.network.dao.PhysicalNetworkVO)16 DB (com.cloud.utils.db.DB)14 Map (java.util.Map)14 ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)13 PhysicalNetworkServiceProviderVO (com.cloud.network.dao.PhysicalNetworkServiceProviderVO)13 Answer (com.cloud.agent.api.Answer)11 TransactionStatus (com.cloud.utils.db.TransactionStatus)11 DataCenter (com.cloud.dc.DataCenter)10 AgentUnavailableException (com.cloud.exception.AgentUnavailableException)10 OperationTimedoutException (com.cloud.exception.OperationTimedoutException)10 HostVO (com.cloud.host.HostVO)9 StoragePool (com.cloud.storage.StoragePool)9