Skip to content

Commit 97db5cb

Browse files
authored
Merge branch 'main' into type-hints-to-redis
2 parents 5275716 + 38f0e33 commit 97db5cb

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

sdk-extension/opentelemetry-sdk-extension-aws/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
- Make EKS resource detector don't warn when not running in EKS
11+
([#3074](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3074))
12+
1013
## Version 2.0.2 (2024-08-05)
1114

1215
See [common CHANGELOG](../../CHANGELOG.md) for the changes in this and prior versions.

sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/eks.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import json
1616
import logging
17+
import os
1718
import ssl
1819
from urllib.request import Request, urlopen
1920

@@ -29,6 +30,9 @@
2930
_CONTAINER_ID_LENGTH = 64
3031
_GET_METHOD = "GET"
3132

33+
_TOKEN_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/token"
34+
_CERT_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
35+
3236

3337
def _aws_http_request(method, path, cred_value):
3438
with urlopen(
@@ -39,18 +43,15 @@ def _aws_http_request(method, path, cred_value):
3943
),
4044
timeout=5,
4145
context=ssl.create_default_context(
42-
cafile="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
46+
cafile=_CERT_PATH,
4347
),
4448
) as response:
4549
return response.read().decode("utf-8")
4650

4751

4852
def _get_k8s_cred_value():
4953
try:
50-
with open(
51-
"/var/run/secrets/kubernetes.io/serviceaccount/token",
52-
encoding="utf8",
53-
) as token_file:
54+
with open(_TOKEN_PATH, encoding="utf8") as token_file:
5455
return "Bearer " + token_file.read()
5556
# pylint: disable=broad-except
5657
except Exception as exception:
@@ -97,6 +98,10 @@ def _get_container_id():
9798
return container_id
9899

99100

101+
def _is_k8s() -> bool:
102+
return os.path.exists(_TOKEN_PATH) and os.path.exists(_CERT_PATH)
103+
104+
100105
class AwsEksResourceDetector(ResourceDetector):
101106
"""Detects attribute values only available when the app is running on AWS
102107
Elastic Kubernetes Service (EKS) and returns them in a Resource.
@@ -106,6 +111,10 @@ class AwsEksResourceDetector(ResourceDetector):
106111

107112
def detect(self) -> "Resource":
108113
try:
114+
# if we are not running on eks exit early without warnings
115+
if not _is_k8s():
116+
return Resource.get_empty()
117+
109118
cred_value = _get_k8s_cred_value()
110119

111120
if not _is_eks(cred_value):

sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_eks.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ class AwsEksResourceDetectorTest(unittest.TestCase):
4242
"opentelemetry.sdk.extension.aws.resource.eks._is_eks",
4343
return_value=True,
4444
)
45+
@patch(
46+
"opentelemetry.sdk.extension.aws.resource.eks._is_k8s",
47+
return_value=True,
48+
)
4549
@patch(
4650
"opentelemetry.sdk.extension.aws.resource.eks._get_cluster_info",
4751
return_value=f"""{{
@@ -88,6 +92,7 @@ def test_simple_create(
8892
self,
8993
mock_open_function,
9094
mock_get_cluster_info,
95+
mock_is_k8s,
9196
mock_is_eks,
9297
mock_get_k8_cred_value,
9398
):
@@ -104,8 +109,32 @@ def test_simple_create(
104109
"opentelemetry.sdk.extension.aws.resource.eks._is_eks",
105110
return_value=False,
106111
)
112+
@patch(
113+
"opentelemetry.sdk.extension.aws.resource.eks._is_k8s",
114+
return_value=True,
115+
)
107116
def test_if_no_eks_env_var_and_should_raise(
108-
self, mock_is_eks, mock_get_k8_cred_value
117+
self, mock_is_k8s, mock_is_eks, mock_get_k8_cred_value
109118
):
110119
with self.assertRaises(RuntimeError):
111120
AwsEksResourceDetector(raise_on_error=True).detect()
121+
122+
@patch(
123+
"opentelemetry.sdk.extension.aws.resource.eks._get_k8s_cred_value",
124+
return_value="MOCK_TOKEN",
125+
)
126+
@patch(
127+
"opentelemetry.sdk.extension.aws.resource.eks._is_eks",
128+
return_value=False,
129+
)
130+
@patch(
131+
"opentelemetry.sdk.extension.aws.resource.eks._is_k8s",
132+
return_value=False,
133+
)
134+
def test_if_no_eks_paths_should_not_raise(
135+
self, mock_is_k8s, mock_is_eks, mock_get_k8_cred_value
136+
):
137+
try:
138+
AwsEksResourceDetector(raise_on_error=True).detect()
139+
except RuntimeError:
140+
self.fail("Should not raise")

0 commit comments

Comments
 (0)