diff --git a/opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/_mapping.py b/opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/_mapping.py index 1e054b92..9c497589 100644 --- a/opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/_mapping.py +++ b/opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/_mapping.py @@ -157,9 +157,7 @@ def get_monitored_resource( attrs = resource.attributes platform = attrs.get(ResourceAttributes.CLOUD_PLATFORM_KEY) - if platform == ResourceAttributes.GCP_COMPUTE_ENGINE: - mr = _create_monitored_resource(_constants.GCE_INSTANCE, attrs) - elif platform == ResourceAttributes.GCP_KUBERNETES_ENGINE: + if ResourceAttributes.K8S_CLUSTER_NAME in attrs: if ResourceAttributes.K8S_CONTAINER_NAME in attrs: mr = _create_monitored_resource(_constants.K8S_CONTAINER, attrs) elif ResourceAttributes.K8S_POD_NAME in attrs: @@ -168,6 +166,8 @@ def get_monitored_resource( mr = _create_monitored_resource(_constants.K8S_NODE, attrs) else: mr = _create_monitored_resource(_constants.K8S_CLUSTER, attrs) + elif platform == ResourceAttributes.GCP_COMPUTE_ENGINE: + mr = _create_monitored_resource(_constants.GCE_INSTANCE, attrs) elif platform == ResourceAttributes.AWS_EC2: mr = _create_monitored_resource(_constants.AWS_EC2_INSTANCE, attrs) else: diff --git a/opentelemetry-resourcedetector-gcp/tests/test_mapping.py b/opentelemetry-resourcedetector-gcp/tests/test_mapping.py index eda679d9..eb99060f 100644 --- a/opentelemetry-resourcedetector-gcp/tests/test_mapping.py +++ b/opentelemetry-resourcedetector-gcp/tests/test_mapping.py @@ -22,6 +22,86 @@ from syrupy.assertion import SnapshotAssertion +@pytest.mark.parametrize( + ("otel_attributes", "expected_type", "expected_labels"), + [ + pytest.param( + { + "cloud.platform": "aws_ec2", + "cloud.region": "us-east-1", + "k8s.cluster.name": "mycluster", + "k8s.namespace.name": "myns", + "k8s.pod.name": "mypod", + "k8s.container.name": "mycontainer", + }, + "k8s_container", + { + "location": "us-east-1", + "cluster_name": "mycluster", + "namespace_name": "myns", + "pod_name": "mypod", + "container_name": "mycontainer", + }, + id="container", + ), + pytest.param( + { + "cloud.platform": "aws_ec2", + "cloud.region": "us-east-1", + "k8s.cluster.name": "mycluster", + "k8s.namespace.name": "myns", + "k8s.pod.name": "mypod", + }, + "k8s_pod", + { + "location": "us-east-1", + "cluster_name": "mycluster", + "namespace_name": "myns", + "pod_name": "mypod", + }, + id="pod", + ), + pytest.param( + { + "cloud.platform": "aws_ec2", + "cloud.region": "us-east-1", + "k8s.cluster.name": "mycluster", + "k8s.node.name": "mynode", + }, + "k8s_node", + { + "location": "us-east-1", + "cluster_name": "mycluster", + "node_name": "mynode", + }, + id="node", + ), + pytest.param( + { + "cloud.platform": "aws_ec2", + "cloud.region": "us-east-1", + "k8s.cluster.name": "mycluster", + }, + "k8s_cluster", + {"location": "us-east-1", "cluster_name": "mycluster"}, + id="cluster", + ), + ], +) +def test_get_monitored_resource_non_gke_k8s( + otel_attributes: Attributes, + expected_type: str, + expected_labels: dict[str, str], +) -> None: + monitored_resource = get_monitored_resource( + Resource.create(otel_attributes) + ) + + assert monitored_resource is not None + assert monitored_resource.type == expected_type + assert monitored_resource.labels == expected_labels + + @pytest.mark.parametrize( "otel_attributes", [