Exemple #1
0
def get_instance():
    """Get a resource based on the application environment.

    Returns a `Resource` configured for the current environment, or None if the
    environment is unknown or unsupported.

    Supported environments include:

    1. 'gke_container'
    - https://cloud.google.com/monitoring/api/resources#tag_gke_container
    2. 'gce_instance'
    - https://cloud.google.com/monitoring/api/resources#tag_gce_instance
    3. 'aws_ec2_instance'
    - https://cloud.google.com/monitoring/api/resources#tag_aws_ec2_instance

    :rtype: :class:`opencensus.common.resource.Resource` or None
    :return: A `Resource` configured for the current environment.
    """
    if is_gke_environment():
        return resource.Resource(
            _GKE_CONTAINER,
            gcp_metadata_config.GcpMetadataConfig().get_gke_metadata())
    if is_gce_environment():
        return resource.Resource(
            _GCE_INSTANCE,
            gcp_metadata_config.GcpMetadataConfig().get_gce_metadata())
    if is_aws_environment():
        return resource.Resource(
            _AWS_EC2_INSTANCE, (aws_identity_doc_utils.
                                AwsIdentityDocumentUtils().get_aws_metadata()))

    return None
Exemple #2
0
    def test_gcp_not_running(self, http_request_mock):
        http_request_mock.return_value = None
        gcp_metadata_config.GcpMetadataConfig.inited = False
        gcp_metadata_config.GcpMetadataConfig.is_running = False
        gcp_metadata_config.gcp_metadata_map = {}

        self.assertFalse(
            gcp_metadata_config.GcpMetadataConfig.is_running_on_gcp())

        self.assertEquals(
            len(gcp_metadata_config.GcpMetadataConfig().get_gce_metadata()), 0)
        self.assertEquals(
            len(gcp_metadata_config.GcpMetadataConfig().get_gke_metadata()), 0)
Exemple #3
0
    def test_get_gce_metadata_binary_strings(self, http_request_mock):
        """
        At least in python 3 binary strings are returned from urllib
        """
        def assign_attribute_value(*args, **kwargs):
            attribute_uri = args[0].split('/')[-1]
            if attribute_uri == 'id':
                return b'my-instance'
            elif attribute_uri == 'project-id':
                return b'my-project'
            elif attribute_uri == 'zone':
                return b'us-east1'

        http_request_mock.side_effect = assign_attribute_value
        gcp_metadata_config.GcpMetadataConfig.inited = False
        gcp_metadata_config.GcpMetadataConfig.is_running = False
        gcp_metadata_config.gcp_metadata_map = {}

        self.assertTrue(
            gcp_metadata_config.GcpMetadataConfig.is_running_on_gcp())

        labels_list = gcp_metadata_config.GcpMetadataConfig().get_gce_metadata(
        )

        self.assertEquals(len(labels_list), 3)

        expected_labels = {
            'instance_id': 'my-instance',
            'project_id': 'my-project',
            'zone': 'us-east1'
        }

        self.assertEquals(labels_list, expected_labels)
Exemple #4
0
    def test_get_gke_metadata_container_empty(self, http_request_mock):
        def assign_attribute_value(*args, **kwargs):
            attribute_uri = args[0].split('/')[-1]
            if attribute_uri == 'id':
                return 'my-instance'
            elif attribute_uri == 'project-id':
                return 'my-project'
            elif attribute_uri == 'zone':
                return 'us-east1'

        http_request_mock.side_effect = assign_attribute_value
        gcp_metadata_config.GcpMetadataConfig.inited = False
        gcp_metadata_config.GcpMetadataConfig.is_running = False
        gcp_metadata_config.gcp_metadata_map = {}

        self.assertTrue(
            gcp_metadata_config.GcpMetadataConfig.is_running_on_gcp())

        labels_list = gcp_metadata_config.GcpMetadataConfig().get_gke_metadata(
        )

        self.assertEquals(len(labels_list), 5)

        expected_labels = {
            'instance_id': 'my-instance',
            'project_id': 'my-project',
            'zone': 'us-east1',
            'pod_id': 'localhost',
            'namespace_id': 'namespace'
        }

        self.assertEquals(labels_list, expected_labels)
Exemple #5
0
def get_instance():
    """Get a resource based on the application environment.

    Returns a `Resource` configured for the current environment, or None if the
    environment is unknown or unsupported.

    :rtype: :class:`opencensus.common.resource.Resource` or None
    :return: A `Resource` configured for the current environment.
    """
    resources = []
    env_resource = resource.get_from_env()
    if env_resource is not None:
        resources.append(env_resource)

    if k8s_utils.is_k8s_environment():
        resources.append(resource.Resource(
            _K8S_CONTAINER, k8s_utils.get_k8s_metadata()))

    if is_gce_environment():
        resources.append(resource.Resource(
            _GCE_INSTANCE,
            gcp_metadata_config.GcpMetadataConfig().get_gce_metadata()))
    elif is_aws_environment():
        resources.append(resource.Resource(
            _AWS_EC2_INSTANCE,
            (aws_identity_doc_utils.AwsIdentityDocumentUtils()
             .get_aws_metadata())))

    if not resources:
        return None
    return resource.merge_resources(resources)
    def test_get_gce_metadata(self, http_request_mock):
        def assign_attribute_value(*args, **kwargs):
            attribute_uri = args[0].split('/')[-1]
            if attribute_uri == 'id':
                return 'my-instance'
            elif attribute_uri == 'project-id':
                return 'my-project'
            elif attribute_uri == 'zone':
                return '/projects/012345678/zones/us-east1'

        http_request_mock.side_effect = assign_attribute_value
        gcp_metadata_config.GcpMetadataConfig.inited = False
        gcp_metadata_config.GcpMetadataConfig.is_running = False
        gcp_metadata_config._GCP_METADATA_MAP = {}

        self.assertTrue(
            gcp_metadata_config.GcpMetadataConfig.is_running_on_gcp())

        labels_list = gcp_metadata_config.GcpMetadataConfig().get_gce_metadata(
        )

        self.assertEqual(len(labels_list), 3)

        expected_labels = {
            'instance_id': 'my-instance',
            'project_id': 'my-project',
            'zone': 'us-east1'
        }

        self.assertDictEqual(labels_list, expected_labels)