def get(): targetArch = getTargetArch() caps = {} caps['kvmEnabled'] = \ str(config.getboolean('vars', 'fake_kvm_support') or os.path.exists('/dev/kvm')).lower() cpuInfo = CpuInfo() cpuTopology = CpuTopology() if config.getboolean('vars', 'report_host_threads_as_cores'): caps['cpuCores'] = str(cpuTopology.threads()) else: caps['cpuCores'] = str(cpuTopology.cores()) caps['cpuThreads'] = str(cpuTopology.threads()) caps['cpuSockets'] = str(cpuTopology.sockets()) caps['onlineCpus'] = ','.join(cpuTopology.onlineCpus()) caps['cpuSpeed'] = cpuInfo.mhz() if config.getboolean('vars', 'fake_kvm_support'): if targetArch == Architecture.X86_64: caps['cpuModel'] = 'Intel(Fake) CPU' flagList = ['vmx', 'sse2', 'nx'] if targetArch == platform.machine(): flagList += cpuInfo.flags() flags = set(flagList) caps['cpuFlags'] = ','.join(flags) + ',model_486,model_pentium,' \ 'model_pentium2,model_pentium3,model_pentiumpro,' \ 'model_qemu32,model_coreduo,model_core2duo,model_n270,' \ 'model_Conroe,model_Penryn,model_Nehalem,model_Opteron_G1' elif targetArch in Architecture.POWER: caps['cpuModel'] = 'POWER 8 (fake)' caps['cpuFlags'] = 'powernv,model_power8' else: raise RuntimeError('Unsupported architecture: %s' % targetArch) else: caps['cpuModel'] = cpuInfo.model() caps['cpuFlags'] = ','.join(cpuInfo.flags() + _getCompatibleCpuModels()) caps.update(_getVersionInfo()) caps.update(netinfo.get()) _report_network_qos(caps) try: caps['hooks'] = hooks.installed() except: logging.debug('not reporting hooks', exc_info=True) caps['operatingSystem'] = osversion() caps['uuid'] = utils.getHostUUID() caps['packages2'] = _getKeyPackages() caps['emulatedMachines'] = _getEmulatedMachines(targetArch) caps['ISCSIInitiatorName'] = _getIscsiIniName() caps['HBAInventory'] = storage.hba.HBAInventory() caps['vmTypes'] = ['kvm'] caps['memSize'] = str(utils.readMemInfo()['MemTotal'] / 1024) caps['reservedMem'] = str(config.getint('vars', 'host_mem_reserve') + config.getint('vars', 'extra_mem_reserve')) caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') # Verify that our libvirt supports virtio RNG (since 10.0.2-31) libvirtVer = LooseVersion( '-'.join((caps['packages2']['libvirt']['version'], caps['packages2']['libvirt']['release']))) requiredVer = LooseVersion('0.10.2-31') if libvirtVer >= requiredVer: caps['rngSources'] = _getRngSources() else: logging.debug('VirtioRNG DISABLED: libvirt version %s required >= %s', libvirtVer, requiredVer) caps['numaNodes'] = getNumaTopology() caps['numaNodeDistance'] = getNumaNodeDistance() caps['autoNumaBalancing'] = getAutoNumaBalancingInfo() caps['selinux'] = _getSELinux() liveSnapSupported = _getLiveSnapshotSupport(targetArch) if liveSnapSupported is not None: caps['liveSnapshot'] = str(liveSnapSupported).lower() caps['liveMerge'] = str(getLiveMergeSupport()).lower() caps['kdumpStatus'] = _getKdumpStatus() caps['hostdevPassthrough'] = str(_getHostdevPassthorughSupport()).lower() caps['additionalFeatures'] = [] if _glusterEnabled: caps['additionalFeatures'].extend(glusterAdditionalFeatures()) return caps
def get(): caps = {} cpu_topology = numa.cpu_topology() caps['kvmEnabled'] = str(os.path.exists('/dev/kvm')).lower() if config.getboolean('vars', 'report_host_threads_as_cores'): caps['cpuCores'] = str(cpu_topology.threads) else: caps['cpuCores'] = str(cpu_topology.cores) caps['cpuThreads'] = str(cpu_topology.threads) caps['cpuSockets'] = str(cpu_topology.sockets) caps['onlineCpus'] = ','.join(cpu_topology.online_cpus) caps['cpuSpeed'] = cpuinfo.frequency() caps['cpuModel'] = cpuinfo.model() caps['cpuFlags'] = ','.join(cpuinfo.flags() + machinetype.compatible_cpu_models()) caps.update(_getVersionInfo()) net_caps = supervdsm.getProxy().network_caps() caps.update(net_caps) try: caps['hooks'] = hooks.installed() except: logging.debug('not reporting hooks', exc_info=True) caps['operatingSystem'] = osinfo.version() caps['uuid'] = host.uuid() caps['packages2'] = osinfo.package_versions() caps['kernelArgs'] = osinfo.kernel_args() caps['emulatedMachines'] = machinetype.emulated_machines( cpuarch.effective()) caps['ISCSIInitiatorName'] = _getIscsiIniName() caps['HBAInventory'] = hba.HBAInventory() caps['vmTypes'] = ['kvm'] caps['memSize'] = str(utils.readMemInfo()['MemTotal'] / 1024) caps['reservedMem'] = str( config.getint('vars', 'host_mem_reserve') + config.getint('vars', 'extra_mem_reserve')) caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') caps['rngSources'] = rngsources.available_sources() caps['numaNodes'] = dict(numa.topology()) caps['numaNodeDistance'] = dict(numa.distances()) caps['autoNumaBalancing'] = numa.autonuma_status() caps['selinux'] = osinfo.selinux_status() liveSnapSupported = _getLiveSnapshotSupport(cpuarch.effective()) if liveSnapSupported is not None: caps['liveSnapshot'] = str(liveSnapSupported).lower() caps['liveMerge'] = str(getLiveMergeSupport()).lower() caps['kdumpStatus'] = osinfo.kdump_status() caps['hostdevPassthrough'] = str(hostdev.is_supported()).lower() caps['additionalFeatures'] = [] if osinfo.glusterEnabled: from gluster.api import glusterAdditionalFeatures caps['additionalFeatures'].extend(glusterAdditionalFeatures()) return caps
def get(): targetArch = getTargetArch() caps = {} caps['kvmEnabled'] = \ str(config.getboolean('vars', 'fake_kvm_support') or os.path.exists('/dev/kvm')).lower() cpuInfo = CpuInfo() cpuTopology = CpuTopology() if config.getboolean('vars', 'report_host_threads_as_cores'): caps['cpuCores'] = str(cpuTopology.threads()) else: caps['cpuCores'] = str(cpuTopology.cores()) caps['cpuThreads'] = str(cpuTopology.threads()) caps['cpuSockets'] = str(cpuTopology.sockets()) caps['onlineCpus'] = ','.join(cpuTopology.onlineCpus()) caps['cpuSpeed'] = cpuInfo.mhz() if config.getboolean('vars', 'fake_kvm_support'): if targetArch == Architecture.X86_64: caps['cpuModel'] = 'Intel(Fake) CPU' flagList = ['vmx', 'sse2', 'nx'] if targetArch == platform.machine(): flagList += cpuInfo.flags() flags = set(flagList) caps['cpuFlags'] = ','.join(flags) + ',model_486,model_pentium,' \ 'model_pentium2,model_pentium3,model_pentiumpro,' \ 'model_qemu32,model_coreduo,model_core2duo,model_n270,' \ 'model_Conroe,model_Penryn,model_Nehalem,model_Opteron_G1' elif targetArch in Architecture.POWER: caps['cpuModel'] = 'POWER 8 (fake)' caps['cpuFlags'] = 'powernv,model_POWER8' else: raise RuntimeError('Unsupported architecture: %s' % targetArch) else: caps['cpuModel'] = cpuInfo.model() caps['cpuFlags'] = ','.join(cpuInfo.flags() + _getCompatibleCpuModels()) caps.update(_getVersionInfo()) caps.update(netinfo.get()) _report_network_qos(caps) try: caps['hooks'] = hooks.installed() except: logging.debug('not reporting hooks', exc_info=True) caps['operatingSystem'] = osversion() caps['uuid'] = utils.getHostUUID() caps['packages2'] = _getKeyPackages() caps['emulatedMachines'] = _getEmulatedMachines(targetArch) caps['ISCSIInitiatorName'] = _getIscsiIniName() caps['HBAInventory'] = storage.hba.HBAInventory() caps['vmTypes'] = ['kvm'] caps['memSize'] = str(utils.readMemInfo()['MemTotal'] / 1024) caps['reservedMem'] = str( config.getint('vars', 'host_mem_reserve') + config.getint('vars', 'extra_mem_reserve')) caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') # Verify that our libvirt supports virtio RNG (since 10.0.2-31) requiredVer = LooseVersion('0.10.2-31') if 'libvirt' not in caps['packages2']: libvirtVer = None else: libvirtVer = LooseVersion('-'.join( (caps['packages2']['libvirt']['version'], caps['packages2']['libvirt']['release']))) if libvirtVer is None: logging.debug('VirtioRNG DISABLED: unknown libvirt version') elif libvirtVer < requiredVer: logging.debug('VirtioRNG DISABLED: libvirt version %s required >= %s', libvirtVer, requiredVer) else: caps['rngSources'] = _getRngSources() caps['numaNodes'] = getNumaTopology() caps['numaNodeDistance'] = getNumaNodeDistance() caps['autoNumaBalancing'] = getAutoNumaBalancingInfo() caps['selinux'] = _getSELinux() liveSnapSupported = _getLiveSnapshotSupport(targetArch) if liveSnapSupported is not None: caps['liveSnapshot'] = str(liveSnapSupported).lower() caps['liveMerge'] = str(getLiveMergeSupport()).lower() caps['kdumpStatus'] = _getKdumpStatus() caps['hostdevPassthrough'] = str(_getHostdevPassthorughSupport()).lower() caps['additionalFeatures'] = [] if _glusterEnabled: caps['additionalFeatures'].extend(glusterAdditionalFeatures()) return caps
def get(): targetArch = getTargetArch() caps = {} caps["kvmEnabled"] = str(config.getboolean("vars", "fake_kvm_support") or os.path.exists("/dev/kvm")).lower() cpuInfo = CpuInfo() cpuTopology = CpuTopology() if config.getboolean("vars", "report_host_threads_as_cores"): caps["cpuCores"] = str(cpuTopology.threads()) else: caps["cpuCores"] = str(cpuTopology.cores()) caps["cpuThreads"] = str(cpuTopology.threads()) caps["cpuSockets"] = str(cpuTopology.sockets()) caps["onlineCpus"] = ",".join(cpuTopology.onlineCpus()) caps["cpuSpeed"] = cpuInfo.mhz() if config.getboolean("vars", "fake_kvm_support"): if targetArch == Architecture.X86_64: caps["cpuModel"] = "Intel(Fake) CPU" flagList = ["vmx", "sse2", "nx"] if targetArch == platform.machine(): flagList += cpuInfo.flags() flags = set(flagList) caps["cpuFlags"] = ( ",".join(flags) + ",model_486,model_pentium," "model_pentium2,model_pentium3,model_pentiumpro," "model_qemu32,model_coreduo,model_core2duo,model_n270," "model_Conroe,model_Penryn,model_Nehalem,model_Opteron_G1" ) elif targetArch in Architecture.POWER: caps["cpuModel"] = "POWER 8 (fake)" caps["cpuFlags"] = "powernv,model_POWER8" else: raise RuntimeError("Unsupported architecture: %s" % targetArch) else: caps["cpuModel"] = cpuInfo.model() caps["cpuFlags"] = ",".join(cpuInfo.flags() + _getCompatibleCpuModels()) caps.update(_getVersionInfo()) caps.update(netinfo.get()) try: caps["hooks"] = hooks.installed() except: logging.debug("not reporting hooks", exc_info=True) caps["operatingSystem"] = osversion() caps["uuid"] = utils.getHostUUID() caps["packages2"] = _getKeyPackages() caps["emulatedMachines"] = _getEmulatedMachines(targetArch) caps["ISCSIInitiatorName"] = _getIscsiIniName() caps["HBAInventory"] = storage.hba.HBAInventory() caps["vmTypes"] = ["kvm"] caps["memSize"] = str(utils.readMemInfo()["MemTotal"] / 1024) caps["reservedMem"] = str(config.getint("vars", "host_mem_reserve") + config.getint("vars", "extra_mem_reserve")) caps["guestOverhead"] = config.get("vars", "guest_ram_overhead") # Verify that our libvirt supports virtio RNG (since 10.0.2-31) requiredVer = LooseVersion("0.10.2-31") if "libvirt" not in caps["packages2"]: libvirtVer = None else: libvirtVer = LooseVersion( "-".join((caps["packages2"]["libvirt"]["version"], caps["packages2"]["libvirt"]["release"])) ) if libvirtVer is None: logging.debug("VirtioRNG DISABLED: unknown libvirt version") elif libvirtVer < requiredVer: logging.debug("VirtioRNG DISABLED: libvirt version %s required >= %s", libvirtVer, requiredVer) else: caps["rngSources"] = _getRngSources() caps["numaNodes"] = getNumaTopology() caps["numaNodeDistance"] = getNumaNodeDistance() caps["autoNumaBalancing"] = getAutoNumaBalancingInfo() caps["selinux"] = _getSELinux() liveSnapSupported = _getLiveSnapshotSupport(targetArch) if liveSnapSupported is not None: caps["liveSnapshot"] = str(liveSnapSupported).lower() caps["liveMerge"] = str(getLiveMergeSupport()).lower() caps["kdumpStatus"] = _getKdumpStatus() caps["hostdevPassthrough"] = str(_getHostdevPassthorughSupport()).lower() caps["additionalFeatures"] = [] if _glusterEnabled: caps["additionalFeatures"].extend(glusterAdditionalFeatures()) return caps
def get(): caps = {} cpu_topology = numa.cpu_topology() caps['kvmEnabled'] = str(os.path.exists('/dev/kvm')).lower() if config.getboolean('vars', 'report_host_threads_as_cores'): caps['cpuCores'] = str(cpu_topology.threads) else: caps['cpuCores'] = str(cpu_topology.cores) caps['cpuThreads'] = str(cpu_topology.threads) caps['cpuSockets'] = str(cpu_topology.sockets) caps['onlineCpus'] = ','.join(cpu_topology.online_cpus) caps['cpuSpeed'] = cpuinfo.frequency() caps['cpuModel'] = cpuinfo.model() caps['cpuFlags'] = ','.join(cpuinfo.flags() + machinetype.compatible_cpu_models()) caps.update(_getVersionInfo()) # TODO: Version requests by engine to ease handling of compatibility. netinfo_data = netinfo_cache.get(compatibility=30600) caps.update(netinfo_data) super_caps_networks = supervdsm.getProxy().caps_networks() caps.update(super_caps_networks) try: caps['hooks'] = hooks.installed() except: logging.debug('not reporting hooks', exc_info=True) caps['operatingSystem'] = osinfo.version() caps['uuid'] = host.uuid() caps['packages2'] = osinfo.package_versions() caps['emulatedMachines'] = machinetype.emulated_machines( cpuarch.effective()) caps['ISCSIInitiatorName'] = _getIscsiIniName() caps['HBAInventory'] = storage.hba.HBAInventory() caps['vmTypes'] = ['kvm'] caps['memSize'] = str(utils.readMemInfo()['MemTotal'] / 1024) caps['reservedMem'] = str(config.getint('vars', 'host_mem_reserve') + config.getint('vars', 'extra_mem_reserve')) caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') # Verify that our libvirt supports virtio RNG (since 10.0.2-31) requiredVer = LooseVersion('0.10.2-31') if 'libvirt' not in caps['packages2']: libvirtVer = None else: libvirtVer = LooseVersion( '-'.join((caps['packages2']['libvirt']['version'], caps['packages2']['libvirt']['release']))) if libvirtVer is None: logging.debug('VirtioRNG DISABLED: unknown libvirt version') elif libvirtVer < requiredVer: logging.debug('VirtioRNG DISABLED: libvirt version %s required >= %s', libvirtVer, requiredVer) else: caps['rngSources'] = vmdevices.core.Rng.available_sources() caps['numaNodes'] = dict(numa.topology()) caps['numaNodeDistance'] = dict(numa.distances()) caps['autoNumaBalancing'] = numa.autonuma_status() caps['selinux'] = osinfo.selinux_status() liveSnapSupported = _getLiveSnapshotSupport(cpuarch.effective()) if liveSnapSupported is not None: caps['liveSnapshot'] = str(liveSnapSupported).lower() caps['liveMerge'] = str(getLiveMergeSupport()).lower() caps['kdumpStatus'] = osinfo.kdump_status() caps['hostdevPassthrough'] = str(hostdev.is_supported()).lower() caps['additionalFeatures'] = [] if osinfo.glusterEnabled: from gluster.api import glusterAdditionalFeatures caps['additionalFeatures'].extend(glusterAdditionalFeatures()) return caps
def get(): caps = {} cpu_topology = numa.cpu_topology() caps['kvmEnabled'] = str(os.path.exists('/dev/kvm')).lower() if config.getboolean('vars', 'report_host_threads_as_cores'): caps['cpuCores'] = str(cpu_topology.threads) else: caps['cpuCores'] = str(cpu_topology.cores) caps['cpuThreads'] = str(cpu_topology.threads) caps['cpuSockets'] = str(cpu_topology.sockets) caps['onlineCpus'] = ','.join(cpu_topology.online_cpus) caps['cpuSpeed'] = cpuinfo.frequency() caps['cpuModel'] = cpuinfo.model() caps['cpuFlags'] = ','.join(cpuinfo.flags() + machinetype.compatible_cpu_models()) caps.update(_getVersionInfo()) net_caps = supervdsm.getProxy().network_caps() caps.update(net_caps) try: caps['hooks'] = hooks.installed() except: logging.debug('not reporting hooks', exc_info=True) caps['operatingSystem'] = osinfo.version() caps['uuid'] = host.uuid() caps['packages2'] = osinfo.package_versions() caps['kernelArgs'] = osinfo.kernel_args() caps['emulatedMachines'] = machinetype.emulated_machines( cpuarch.effective()) caps['ISCSIInitiatorName'] = _getIscsiIniName() caps['HBAInventory'] = hba.HBAInventory() caps['vmTypes'] = ['kvm'] caps['memSize'] = str(utils.readMemInfo()['MemTotal'] / 1024) caps['reservedMem'] = str(config.getint('vars', 'host_mem_reserve') + config.getint('vars', 'extra_mem_reserve')) caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') caps['rngSources'] = rngsources.list_available() caps['numaNodes'] = dict(numa.topology()) caps['numaNodeDistance'] = dict(numa.distances()) caps['autoNumaBalancing'] = numa.autonuma_status() caps['selinux'] = osinfo.selinux_status() liveSnapSupported = _getLiveSnapshotSupport(cpuarch.effective()) if liveSnapSupported is not None: caps['liveSnapshot'] = str(liveSnapSupported).lower() caps['liveMerge'] = str(getLiveMergeSupport()).lower() caps['kdumpStatus'] = osinfo.kdump_status() caps['hostdevPassthrough'] = str(hostdev.is_supported()).lower() caps['additionalFeatures'] = [] if osinfo.glusterEnabled: from gluster.api import glusterAdditionalFeatures caps['additionalFeatures'].extend(glusterAdditionalFeatures()) return caps