Skip to content

Commit f66591e

Browse files
authored
Update no container name behaviour (#186)
* detect resources even if `container_name` is not set * update tests * update detection of whether running on GKE * update tests * fix lint
1 parent e3ad3aa commit f66591e

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/__init__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,19 @@ def get_gce_resources():
6161

6262
def get_gke_resources():
6363
"""Resource finder for GKE attributes"""
64-
# The user must specify the container name via the Downward API
65-
container_name = os.getenv("CONTAINER_NAME")
66-
if container_name is None:
64+
65+
if os.getenv("KUBERNETES_SERVICE_HOST") is None:
6766
return {}
67+
6868
(
6969
common_attributes,
7070
all_metadata,
7171
) = _get_google_metadata_and_common_attributes()
7272

73+
container_name = os.getenv("CONTAINER_NAME")
74+
if container_name is not None:
75+
common_attributes["container.name"] = container_name
76+
7377
# Fallback to reading namespace from a file is the env var is not set
7478
pod_namespace = os.getenv("NAMESPACE")
7579
if pod_namespace is None:
@@ -89,7 +93,6 @@ def get_gke_resources():
8993
"k8s.namespace.name": pod_namespace,
9094
"k8s.pod.name": os.getenv("POD_NAME", os.getenv("HOSTNAME", "")),
9195
"host.id": all_metadata["instance"]["id"],
92-
"container.name": container_name,
9396
"gcp.resource_type": "gke_container",
9497
}
9598
)

opentelemetry-resourcedetector-gcp/tests/test_gcp_resource_detector.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
CONTAINER_NAME = "CONTAINER_NAME"
3030
HOSTNAME = "HOSTNAME"
3131
POD_NAME = "POD_NAME"
32+
KUBERNETES_SERVICE_HOST = "KUBERNETES_SERVICE_HOST"
3233

3334
GCE_RESOURCES_JSON_STRING = {
3435
"instance": {"id": "instance_id", "zone": "projects/123/zones/zone"},
@@ -85,13 +86,34 @@ class TestGKEResourceFinder(unittest.TestCase):
8586
def tearDown(self) -> None:
8687
clear_gke_env_vars()
8788

89+
# pylint: disable=unused-argument
90+
def test_not_running_on_gke(self, getter):
91+
pop_environ_key(KUBERNETES_SERVICE_HOST)
92+
found_resources = get_gke_resources()
93+
self.assertEqual(found_resources, {})
94+
8895
# pylint: disable=unused-argument
8996
def test_missing_container_name(self, getter):
97+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
9098
pop_environ_key(CONTAINER_NAME)
91-
self.assertEqual(get_gke_resources(), {})
99+
found_resources = get_gke_resources()
100+
self.assertEqual(
101+
found_resources,
102+
{
103+
"cloud.account.id": "project_id",
104+
"k8s.cluster.name": "cluster_name",
105+
"k8s.namespace.name": "",
106+
"host.id": "instance_id",
107+
"k8s.pod.name": "",
108+
"cloud.zone": "zone",
109+
"cloud.provider": "gcp",
110+
"gcp.resource_type": "gke_container",
111+
},
112+
)
92113

93114
# pylint: disable=unused-argument
94115
def test_environment_empty_strings(self, getter):
116+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
95117
os.environ[CONTAINER_NAME] = ""
96118
os.environ[NAMESPACE] = ""
97119
found_resources = get_gke_resources()
@@ -111,6 +133,7 @@ def test_environment_empty_strings(self, getter):
111133
)
112134

113135
def test_missing_namespace_file(self, getter):
136+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
114137
os.environ[CONTAINER_NAME] = "container_name"
115138
found_resources = get_gke_resources()
116139
self.assertEqual(
@@ -129,6 +152,7 @@ def test_missing_namespace_file(self, getter):
129152
)
130153

131154
def test_finding_gke_resources(self, getter):
155+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
132156
os.environ[NAMESPACE] = "namespace"
133157
os.environ[CONTAINER_NAME] = "container_name"
134158
os.environ[HOSTNAME] = "host_name"
@@ -150,6 +174,7 @@ def test_finding_gke_resources(self, getter):
150174
)
151175

152176
def test_finding_gke_resources_with_pod_name(self, getter):
177+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
153178
os.environ[NAMESPACE] = "namespace"
154179
os.environ[CONTAINER_NAME] = "container_name"
155180
os.environ[HOSTNAME] = "host_name"
@@ -182,6 +207,7 @@ def tearDown(self) -> None:
182207
def test_finding_gce_resources(self, getter):
183208
# The necessary env variables were not set for GKE resource detection
184209
# to succeed. We should be falling back to detecting GCE resources
210+
pop_environ_key(KUBERNETES_SERVICE_HOST)
185211
resource_finder = GoogleCloudResourceDetector()
186212
getter.return_value.json.return_value = GCE_RESOURCES_JSON_STRING
187213
found_resources = resource_finder.detect()
@@ -219,7 +245,7 @@ def test_finding_gce_resources(self, getter):
219245
def test_finding_gke_resources(self, getter):
220246
# The necessary env variables were set for GKE resource detection
221247
# to succeed. No GCE resource info should be extracted
222-
248+
os.environ[KUBERNETES_SERVICE_HOST] = "10.0.0.1"
223249
os.environ[NAMESPACE] = "namespace"
224250
os.environ[CONTAINER_NAME] = "container_name"
225251
os.environ[HOSTNAME] = "host_name"

0 commit comments

Comments
 (0)