Exemplo n.º 1
0
def _smoke_test():
    """
    Simple smoke tests of GCP detector and collector
    """
    # Gather only information about hardware and virtualization
    from rhsmlib.facts.host_collector import HostCollector

    import sys

    root = logging.getLogger()
    root.setLevel(logging.DEBUG)

    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    root.addHandler(handler)

    facts = {}
    facts.update(HostCollector().get_all())
    gcp_cloud_provider = GCPCloudProvider(facts)
    result = gcp_cloud_provider.is_running_on_cloud()
    probability = gcp_cloud_provider.is_likely_running_on_cloud()
    print(">>> debug <<< result: %s, %6.3f" % (result, probability))
    if result is True:
        # 1. using default audience
        token = gcp_cloud_provider.get_metadata()
        print(f">>> debug <<< 1. token: {token}")
        # 2. using some custom audience
        gcp_cloud_provider = GCPCloudProvider(facts, audience_url="https://localhost:8443/candlepin")
        token = gcp_cloud_provider.get_metadata()
        print(f">>> debug <<< 2. token: {token}")
Exemplo n.º 2
0
def _smoke_tests():
    """
    Simple smoke test of azure detector and collector
    :return: None
    """
    # Gather only information about hardware and virtualization
    from rhsmlib.facts.host_collector import HostCollector
    from rhsmlib.facts.hwprobe import HardwareCollector

    import sys

    root = logging.getLogger()
    root.setLevel(logging.DEBUG)

    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    root.addHandler(handler)

    facts = {}
    facts.update(HostCollector().get_all())
    facts.update(HardwareCollector().get_all())
    azure_cloud_detector = AzureCloudDetector(facts)
    result = azure_cloud_detector.is_running_on_cloud()
    probability = azure_cloud_detector.is_likely_running_on_cloud()
    print('>>> debug <<< result: %s, %6.3f' % (result, probability))

    if result is True:
        azure_cloud_collector = AzureCloudCollector()
        metadata = azure_cloud_collector.get_metadata()
        signature = azure_cloud_collector.get_signature()
        print(f'>>> debug <<< metadata: {metadata}')
        print(f'>>> debug <<< signature: {signature}')
Exemplo n.º 3
0
def detect_cloud_provider():
    """
    This method tries to detect cloud provider using hardware information provided by dmidecode.
    When there is strong sign that the VM is running on one of the cloud provider, then return
    list containing only one provider. When there is no strong sign of one cloud provider, then
    try to detect cloud provider using heuristics methods. In this case this method will return
    list of all cloud providers sorted according detected probability
    :return: List of string representing detected cloud providers. E.g. ['aws'] or ['aws', 'gcp']
    """

    # Gather only information about hardware and virtualization
    facts = {}
    facts.update(HostCollector().get_all())
    facts.update(HardwareCollector().get_all())

    cloud_detectors = [cls(facts) for cls in CLOUD_DETECTORS]

    log.debug('Trying to detect cloud provider')

    # First try to detect cloud providers using strong signs
    cloud_list = []
    for cloud_detector in cloud_detectors:
        cloud_detected = cloud_detector.is_running_on_cloud()
        if cloud_detected is True:
            cloud_list.append(cloud_detector.ID)

    # When only one cloud provider was detected, then return the list with
    # one cloud provider. Print error in other cases and try to detect cloud providers
    # using heuristics methods
    if len(cloud_list) == 1:
        return cloud_list
    elif len(cloud_list) == 0:
        log.error('No cloud provider detected using strong signs')
    elif len(cloud_list) > 1:
        log.error(
            'More than one cloud provider detected using strong signs ({providers})'
            .format(providers=", ".join(cloud_list)))

    # When no cloud provider detected using strong signs, because behavior of cloud providers
    # has changed, then try to detect cloud provider using some heuristics
    cloud_list = []
    for cloud_detector in cloud_detectors:
        probability = cloud_detector.is_likely_running_on_cloud()
        if probability > 0.0:
            cloud_list.append((probability, cloud_detector.ID))
    # Sort list according probability (provider with highest probability first)
    cloud_list.sort(reverse=True)
    # We care only about order, not probability in the result (filter probability out)
    cloud_list = [item[1] for item in cloud_list]

    if len(cloud_list) == 0:
        log.error('No cloud provider detected using heuristics')

    return cloud_list
Exemplo n.º 4
0
def _smoke_tests():
    """
    Simple smoke test of azure detector and collector
    :return: None
    """
    # Gather only information about hardware and virtualization
    from rhsmlib.facts.host_collector import HostCollector

    import sys

    root = logging.getLogger()
    root.setLevel(logging.DEBUG)

    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    root.addHandler(handler)

    facts = {}
    facts.update(HostCollector().get_all())
    azure_cloud_provider = AzureCloudProvider(facts)
    result = azure_cloud_provider.is_running_on_cloud()
    probability = azure_cloud_provider.is_likely_running_on_cloud()
    print(">>> debug <<< result: %s, %6.3f" % (result, probability))

    if result is True:
        metadata = azure_cloud_provider.get_metadata()
        signature = azure_cloud_provider.get_signature()
        print(f">>> debug <<< metadata: {metadata}")
        print(f">>> debug <<< signature: {signature}")
        api_versions = azure_cloud_provider.get_api_versions()
        print(f">>> debug <<< api_versions: {api_versions}")

        # Test getting metadata and signature with too old API version
        AzureCloudProvider.API_VERSION = "2011-01-01"
        AzureCloudProvider.CLOUD_PROVIDER_METADATA_URL = (
            "http://169.254.169.254/metadata/instance?api-version=2011-01-01")
        AzureCloudProvider.CLOUD_PROVIDER_SIGNATURE_URL = (
            "http://169.254.169.254/metadata/attested/document?api-version=2011-01-01"
        )
        azure_cloud_provider = AzureCloudProvider({})
        azure_cloud_provider._cached_metadata = None
        azure_cloud_provider._cached_signature = None
        metadata = azure_cloud_provider.get_metadata()
        print(f">>> debug <<< metadata: {metadata}")
        signature = azure_cloud_provider.get_signature()
        print(f">>> debug <<< signature: {signature}")
Exemplo n.º 5
0
def gather_system_facts() -> dict:
    """
    Try to gather system facts necessary for detection of cloud provider
    :return: Dictionary with system facts
    """
    facts = {}

    # Gather only basic information about hardware, virtualization and custom facts
    facts.update(HostCollector().get_all())

    # When cloud provider will change information provided by SM BIOS, then
    # customers will be able to create simple workaround using custom facts.
    facts.update(CustomFactsCollector().get_all())

    return facts
Exemplo n.º 6
0
def _smoke_tests():
    """
    Simple smoke tests of AWS detector and collector
    :return: None
    """
    # Gather only information about hardware and virtualization
    from rhsmlib.facts.host_collector import HostCollector
    from rhsmlib.facts.hwprobe import HardwareCollector
    import sys

    root = logging.getLogger()
    root.setLevel(logging.DEBUG)

    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    root.addHandler(handler)

    facts = {}
    facts.update(HostCollector().get_all())
    facts.update(HardwareCollector().get_all())
    aws_cloud_detector = AWSCloudDetector(facts)
    result = aws_cloud_detector.is_running_on_cloud()
    probability = aws_cloud_detector.is_likely_running_on_cloud()
    print(
        f'>>> debug <<< cloud provider: {result}, probability: {probability}')

    if result is True:
        metadata_collector = AWSCloudCollector()
        metadata = metadata_collector.get_metadata()
        print(f'>>> debug <<< cloud metadata: {metadata}')
        signature = metadata_collector.get_signature()
        print(f'>>> debug <<< metadata signature: {signature}')

        metadata_v2 = metadata_collector._get_metadata_from_server_imds_v2()
        print(f'>>> debug <<< cloud metadata: {metadata_v2}')
        signature_v2 = metadata_collector._get_signature_from_server_imds_v2()
        print(f'>>> debug <<< cloud signature: {signature_v2}')
Exemplo n.º 7
0
        found_google = False
        found_gcp = False
        for hw_item in self.hw_info.values():
            if type(hw_item) != str:
                continue
            if 'google' in hw_item.lower():
                found_google = True
            elif 'gcp' in hw_item.lower():
                found_gcp = True
        if found_google is True:
            probability += 0.3
        if found_gcp is True:
            probability += 0.1

        return probability


# Some temporary smoke testing code. You can test this module using:
# sudo PYTHONPATH=./src:./syspurse/src python3 -m rhsmlib.cloud.providers.gcp
if __name__ == '__main__':
    # Gather only information about hardware and virtualization
    from rhsmlib.facts.host_collector import HostCollector
    from rhsmlib.facts.hwprobe import HardwareCollector
    _facts = {}
    _facts.update(HostCollector().get_all())
    _facts.update(HardwareCollector().get_all())
    _gcp_cloud_detector = GCPCloudDetector(_facts)
    _result = _gcp_cloud_detector.is_running_on_cloud()
    _probability = _gcp_cloud_detector.is_likely_running_on_cloud()
    print('>>> debug <<< result: %s, %6.3f' % (_result, _probability))