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_merge_resource(self): with self.assertRaises(ValueError): resource_module.merge_resources(None) with self.assertRaises(ValueError): resource_module.merge_resources([]) r1 = Resource(None, {'lk1': 'lv11'}) r2 = Resource('t2', {'lk1': 'lv12', 'lk2': 'lv22'}) r3 = Resource('t3', {'lk2': 'lv23', 'lk3': 'lv33'}) merged = resource_module.merge_resources([r1, r2, r3]) self.assertEqual(merged.type, 't2') self.assertDictEqual(merged.labels, { 'lk1': 'lv11', 'lk2': 'lv22', 'lk3': 'lv33' })
def test_merge_resource_no_type(self): r1 = Resource(None) r2 = Resource(None) merged = resource_module.merge_resources([r1, r2]) self.assertEqual(merged.type, None)