def getProcessorsByUnitaryComputerSystem(client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> list(Processor)
    Get Processors by UnitaryComputerSystem
    '''
    processorInstances = client.getInstances("OMC_Processor")
    
    processors = []
    ignoredProcessorsCount = 0
    for processorInstace in processorInstances:
        systemName = cim_discover.cleanString(_getCimInstanceProperty(processorInstace, 'SystemName'))
        # uuid of cpu should match uuid of ESX, safe check
        if unitaryComputerSystem.name == systemName:
            processor = Processor()
            processor.setObjectPath(processorInstace.getObjectPath())
            processor.systemName = systemName
            processor.cpuStatus = cim_discover.getIntFromCimInt(_getCimInstanceProperty(processorInstace, 'CPUStatus'))
            processor.elementName = cim_discover.cleanString(_getCimInstanceProperty(processorInstace, 'ElementName'))
            modelName = cim_discover.cleanString(_getCimInstanceProperty(processorInstace, 'ModelName'))
            processor.modelName = modelName and re.sub(r"\s+", " ", modelName)
            processor.currentClockSpeed = cim_discover.getIntFromCimInt(_getCimInstanceProperty(processorInstace, 'CurrentClockSpeed'))
            processor.numberOfEnabledCores = cim_discover.getIntFromCimInt(_getCimInstanceProperty(processorInstace, 'NumberOfEnabledCores'))
            processor.enabledState = cim_discover.getIntFromCimInt(_getCimInstanceProperty(processorInstace, 'EnabledState'))
            
            processors.append(processor)
        else:
            ignoredProcessorsCount += 1
            
    if ignoredProcessorsCount > 0:
        logger.warn("Ignored %s processors due to mismatching UUID or being disabled" % ignoredProcessorsCount)
    
    return processors
def getMemoryByUnitaryComputerSystem(client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> list(Memory)
    Get Memory by UnitaryComputerSystem
    '''
    memoryInstances = client.getInstances("OMC_Memory")
    
    memoryList = []
    ignoredMemoryCount = 0
    for memoryInstance in memoryInstances:
        systemName = cim_discover.cleanString(_getCimInstanceProperty(memoryInstance, 'SystemName'))
        # uuid of memory should match uuid of ESX, safe check
        if unitaryComputerSystem.name == systemName:
            memory = Memory()
            memory.setObjectPath(memoryInstance.getObjectPath())
            memory.systemName = systemName
            memory.numberOfBlocks = cim_discover.getIntFromCimInt(_getCimInstanceProperty(memoryInstance, "NumberOfBlocks"))
            memory.blockSize = cim_discover.getIntFromCimInt(_getCimInstanceProperty(memoryInstance, "BlockSize"))
            memoryList.append(memory)
        else:
            ignoredMemoryCount += 1
            
    if ignoredMemoryCount > 0:
        logger.warn("Ignored %s memory instances due to mismatching UUID")
    
    return memoryList
def getHypervisorSoftwareIdentityByUnitaryComputerSystem(client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> VmwareHypervisorSoftwareIdentity or None
    '''
    softwareIdentityInstances = cim_discover.getAssociatorsWithTypeEnforcement(client, unitaryComputerSystem.getObjectPath(), "VMware_InstalledSoftwareIdentity", "VMware_HypervisorSoftwareIdentity")

    hypervisorInstance = softwareIdentityInstances and softwareIdentityInstances[0] or None
    
    if hypervisorInstance is not None:
        hypervisorSoftwareIdentity = VmwareHypervisorSoftwareIdentity()
        hypervisorSoftwareIdentity.setObjectPath(hypervisorInstance.getObjectPath())
        hypervisorSoftwareIdentity.name = cim_discover.cleanString(_getCimInstanceProperty(hypervisorInstance, 'Name'))
        hypervisorSoftwareIdentity.elementName = cim_discover.cleanString(_getCimInstanceProperty(hypervisorInstance, 'ElementName'))
        hypervisorSoftwareIdentity.versionString = cim_discover.cleanString(_getCimInstanceProperty(hypervisorInstance, 'VersionString'))
        
        majorVersion = _getCimInstanceProperty(hypervisorInstance, 'MajorVersion')
        hypervisorSoftwareIdentity.majorVersion = cim_discover.getIntFromCimInt(majorVersion)
        minorVersion = _getCimInstanceProperty(hypervisorInstance, 'MinorVersion')
        hypervisorSoftwareIdentity.minorVersion = cim_discover.getIntFromCimInt(minorVersion)
        revisionNumber = _getCimInstanceProperty(hypervisorInstance, 'RevisionNumber')
        hypervisorSoftwareIdentity.revisionNumber = cim_discover.getIntFromCimInt(revisionNumber)
        largeBuildNumber = _getCimInstanceProperty(hypervisorInstance, 'LargeBuildNumber')
        hypervisorSoftwareIdentity.largeBuildNumber = cim_discover.getIntFromCimInt(largeBuildNumber)

        lastStartTime = _getCimInstanceProperty(hypervisorInstance, 'LastStartTime')
        hypervisorSoftwareIdentity.lastStartTime = cim_discover.getDateFromCimDate(lastStartTime)

        return hypervisorSoftwareIdentity
def getMemoryByUnitaryComputerSystem(client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> list(Memory)
    Get Memory by UnitaryComputerSystem
    '''
    memoryInstances = client.getInstances("OMC_Memory")

    memoryList = []
    ignoredMemoryCount = 0
    for memoryInstance in memoryInstances:
        systemName = cim_discover.cleanString(
            _getCimInstanceProperty(memoryInstance, 'SystemName'))
        # uuid of memory should match uuid of ESX, safe check
        if unitaryComputerSystem.name == systemName:
            memory = Memory()
            memory.setObjectPath(memoryInstance.getObjectPath())
            memory.systemName = systemName
            memory.numberOfBlocks = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(memoryInstance, "NumberOfBlocks"))
            memory.blockSize = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(memoryInstance, "BlockSize"))
            memoryList.append(memory)
        else:
            ignoredMemoryCount += 1

    if ignoredMemoryCount > 0:
        logger.warn("Ignored %s memory instances due to mismatching UUID")

    return memoryList
def getHypervisorSoftwareIdentityByUnitaryComputerSystem(
        client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> VmwareHypervisorSoftwareIdentity or None
    '''
    softwareIdentityInstances = cim_discover.getAssociatorsWithTypeEnforcement(
        client, unitaryComputerSystem.getObjectPath(),
        "VMware_InstalledSoftwareIdentity",
        "VMware_HypervisorSoftwareIdentity")

    hypervisorInstance = softwareIdentityInstances and softwareIdentityInstances[
        0] or None

    if hypervisorInstance is not None:
        hypervisorSoftwareIdentity = VmwareHypervisorSoftwareIdentity()
        hypervisorSoftwareIdentity.setObjectPath(
            hypervisorInstance.getObjectPath())
        hypervisorSoftwareIdentity.name = cim_discover.cleanString(
            _getCimInstanceProperty(hypervisorInstance, 'Name'))
        hypervisorSoftwareIdentity.elementName = cim_discover.cleanString(
            _getCimInstanceProperty(hypervisorInstance, 'ElementName'))
        hypervisorSoftwareIdentity.versionString = cim_discover.cleanString(
            _getCimInstanceProperty(hypervisorInstance, 'VersionString'))

        majorVersion = _getCimInstanceProperty(hypervisorInstance,
                                               'MajorVersion')
        hypervisorSoftwareIdentity.majorVersion = cim_discover.getIntFromCimInt(
            majorVersion)
        minorVersion = _getCimInstanceProperty(hypervisorInstance,
                                               'MinorVersion')
        hypervisorSoftwareIdentity.minorVersion = cim_discover.getIntFromCimInt(
            minorVersion)
        revisionNumber = _getCimInstanceProperty(hypervisorInstance,
                                                 'RevisionNumber')
        hypervisorSoftwareIdentity.revisionNumber = cim_discover.getIntFromCimInt(
            revisionNumber)
        largeBuildNumber = _getCimInstanceProperty(hypervisorInstance,
                                                   'LargeBuildNumber')
        hypervisorSoftwareIdentity.largeBuildNumber = cim_discover.getIntFromCimInt(
            largeBuildNumber)

        lastStartTime = _getCimInstanceProperty(hypervisorInstance,
                                                'LastStartTime')
        hypervisorSoftwareIdentity.lastStartTime = cim_discover.getDateFromCimDate(
            lastStartTime)

        return hypervisorSoftwareIdentity
def getVirtualMachinesByEsx(client, esxInstance):
    '''
    CimClient -> list(VmComputerSystem)
    '''
    vmInstances = cim_discover.getAssociatorsWithTypeEnforcement(
        client, esxInstance.getObjectPath(), "VMWARE_HostedDependency",
        "VMWARE_VMComputerSystem")

    vmList = []
    for vmInstance in vmInstances:
        vm = VmComputerSystem()
        vm.setObjectPath(vmInstance.getObjectPath())
        vm.name = cim_discover.cleanString(
            _getCimInstanceProperty(vmInstance, "Name"))
        elementName = _getCimInstanceProperty(vmInstance, "ElementName")
        elementName = cim_discover.cleanString(elementName)
        # html unescape : & -> &
        elementName = cim_discover.htmlUnescape(elementName)
        # url unescape: %25 -> %
        # vmware escapes 3 characters, both slashes and %
        elementName = urllib.unquote(elementName)
        vm.elementName = elementName

        description = _getCimInstanceProperty(vmInstance, "Description")
        description = cim_discover.cleanString(description)
        vm.description = cim_discover.htmlUnescape(description)

        identifyingDescriptions = _getCimInstanceProperty(
            vmInstance, 'IdentifyingDescriptions')
        identifyingDescriptions = map(cim_discover.cleanString,
                                      identifyingDescriptions)

        otherIdentifyingInfo = _getCimInstanceProperty(vmInstance,
                                                       'OtherIdentifyingInfo')
        otherIdentifyingInfo = map(cim_discover.cleanString,
                                   otherIdentifyingInfo)

        customProperties = _dictionaryFromCrossCollections(
            identifyingDescriptions, otherIdentifyingInfo)

        vm.biosUuid = customProperties.get("BIOS UUID")
        vm.hostName = customProperties.get("Hostname")

        primaryIpAddress = customProperties.get("Primary IP Address")
        if netutils.isValidIp(
                primaryIpAddress) and not netutils.isLocalIp(primaryIpAddress):
            vm.primaryIpAddress = primaryIpAddress

        operationalStatusArray = _getCimInstanceProperty(
            vmInstance, 'OperationalStatus')
        if operationalStatusArray is not None:
            for statusValue in operationalStatusArray:
                if statusValue is not None:
                    statusValueInt = cim_discover.getIntFromCimInt(statusValue)
                    vm.operationalStatus.add(statusValueInt)

        vmList.append(vm)

    return vmList
def getProcessorsByUnitaryComputerSystem(client, unitaryComputerSystem):
    '''
    CimClient, UnitaryComputerSystem -> list(Processor)
    Get Processors by UnitaryComputerSystem
    '''
    processorInstances = client.getInstances("OMC_Processor")

    processors = []
    ignoredProcessorsCount = 0
    for processorInstace in processorInstances:
        systemName = cim_discover.cleanString(
            _getCimInstanceProperty(processorInstace, 'SystemName'))
        # uuid of cpu should match uuid of ESX, safe check
        if unitaryComputerSystem.name == systemName:
            processor = Processor()
            processor.setObjectPath(processorInstace.getObjectPath())
            processor.systemName = systemName
            processor.cpuStatus = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(processorInstace, 'CPUStatus'))
            processor.elementName = cim_discover.cleanString(
                _getCimInstanceProperty(processorInstace, 'ElementName'))
            modelName = cim_discover.cleanString(
                _getCimInstanceProperty(processorInstace, 'ModelName'))
            processor.modelName = modelName and re.sub(r"\s+", " ", modelName)
            processor.currentClockSpeed = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(processorInstace, 'CurrentClockSpeed'))
            processor.numberOfEnabledCores = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(processorInstace,
                                        'NumberOfEnabledCores'))
            processor.enabledState = cim_discover.getIntFromCimInt(
                _getCimInstanceProperty(processorInstace, 'EnabledState'))

            processors.append(processor)
        else:
            ignoredProcessorsCount += 1

    if ignoredProcessorsCount > 0:
        logger.warn(
            "Ignored %s processors due to mismatching UUID or being disabled" %
            ignoredProcessorsCount)

    return processors
def getVirtualMachinesByEsx(client, esxInstance):
    '''
    CimClient -> list(VmComputerSystem)
    '''
    vmInstances = cim_discover.getAssociatorsWithTypeEnforcement(client, esxInstance.getObjectPath(), "VMWARE_HostedDependency", "VMWARE_VMComputerSystem")
    
    vmList = []
    for vmInstance in vmInstances:
        vm = VmComputerSystem()
        vm.setObjectPath(vmInstance.getObjectPath())
        vm.name = cim_discover.cleanString(_getCimInstanceProperty(vmInstance, "Name"))
        elementName = _getCimInstanceProperty(vmInstance, "ElementName")
        elementName = cim_discover.cleanString(elementName)
        # html unescape : & -> &
        elementName = cim_discover.htmlUnescape(elementName)
        # url unescape: %25 -> %
        # vmware escapes 3 characters, both slashes and %
        elementName = urllib.unquote(elementName)
        vm.elementName = elementName
        
        description = _getCimInstanceProperty(vmInstance, "Description")
        description = cim_discover.cleanString(description)
        vm.description = cim_discover.htmlUnescape(description)
        
        identifyingDescriptions = _getCimInstanceProperty(vmInstance, 'IdentifyingDescriptions')
        identifyingDescriptions = map(cim_discover.cleanString, identifyingDescriptions)
        
        otherIdentifyingInfo = _getCimInstanceProperty(vmInstance, 'OtherIdentifyingInfo')
        otherIdentifyingInfo = map(cim_discover.cleanString, otherIdentifyingInfo)
        
        customProperties = _dictionaryFromCrossCollections(identifyingDescriptions, otherIdentifyingInfo)
        
        vm.biosUuid = customProperties.get("BIOS UUID")
        vm.hostName = customProperties.get("Hostname")
        
        primaryIpAddress = customProperties.get("Primary IP Address")
        if netutils.isValidIp(primaryIpAddress) and not netutils.isLocalIp(primaryIpAddress):
            vm.primaryIpAddress = primaryIpAddress
        
        operationalStatusArray = _getCimInstanceProperty(vmInstance, 'OperationalStatus')
        if operationalStatusArray is not None:
            for statusValue in operationalStatusArray:
                if statusValue is not None:
                    statusValueInt = cim_discover.getIntFromCimInt(statusValue)
                    vm.operationalStatus.add(statusValueInt)
        
        vmList.append(vm)
    
    return vmList