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
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)
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)
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)
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)