Skip to content

Commit 02dce23

Browse files
committed
opentelemetry-sdk-extension-aws: make eks detector less chatty
Don't print warnings if we are not running inside an eks instance so we can load the resource detector more generally and avoid warnings in stderr.
1 parent 433dd35 commit 02dce23

File tree

2 files changed

+44
-6
lines changed
  • sdk-extension/opentelemetry-sdk-extension-aws

2 files changed

+44
-6
lines changed

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

+14-5
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

+30-1
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)