Skip to content

Commit 8796d06

Browse files
nubtronCopilot
andauthored
Fix Cilium e2e metric readiness (DataDog#23760)
* Fix Cilium e2e metric readiness * Refine Cilium metric readiness wait * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent c78e819 commit 8796d06

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

cilium/tests/conftest.py

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from datadog_checks.base.utils.common import get_docker_hostname
1010
from datadog_checks.cilium import CiliumCheck
1111
from datadog_checks.dev import run_command
12+
from datadog_checks.dev.conditions import WaitFor
1213
from datadog_checks.dev.kind import kind_run
1314
from datadog_checks.dev.kube_port_forward import port_forward
1415
from datadog_checks.dev.utils import get_active_env
@@ -110,9 +111,11 @@ def setup_cilium():
110111
)
111112
if result.stderr:
112113
raise Exception(result.stderr)
113-
pods = result.stdout.split(" ")
114+
cilium_pods = result.stdout.split()
115+
if not cilium_pods:
116+
raise AssertionError("No Cilium pods found")
114117

115-
for pod in pods:
118+
for pod in cilium_pods:
116119
result = run_command(
117120
[
118121
"kubectl",
@@ -121,7 +124,7 @@ def setup_cilium():
121124
"cilium",
122125
"-c",
123126
"cilium-agent",
124-
pod.strip(),
127+
pod,
125128
"--",
126129
"cilium",
127130
"endpoint",
@@ -132,6 +135,52 @@ def setup_cilium():
132135
if result.stderr:
133136
raise Exception(result.stderr)
134137

138+
WaitFor(
139+
wait_for_cilium_metric_families,
140+
attempts=60,
141+
wait=2,
142+
args=(
143+
cilium_pods,
144+
[
145+
"cilium_forward_bytes_total",
146+
"cilium_forward_count_total",
147+
"cilium_endpoint_regeneration_time_stats_seconds",
148+
"cilium_policy_regeneration_time_stats_seconds",
149+
],
150+
),
151+
)()
152+
153+
154+
def wait_for_cilium_metric_families(pods, families):
155+
missing = []
156+
for pod in pods:
157+
for family in families:
158+
result = run_command(
159+
[
160+
"kubectl",
161+
"exec",
162+
"-n",
163+
"cilium",
164+
"-c",
165+
"cilium-agent",
166+
pod,
167+
"--",
168+
"cilium",
169+
"metrics",
170+
"list",
171+
"--match-pattern",
172+
family,
173+
],
174+
capture=True,
175+
)
176+
if result.code != 0:
177+
raise Exception(result.stderr or result.stdout)
178+
if family not in result.stdout:
179+
missing.append("{} on {}".format(family, pod))
180+
181+
if missing:
182+
raise AssertionError("Cilium metric families are not available yet: {}".format(", ".join(missing)))
183+
135184

136185
def get_instances(agent_host, agent_port, operator_host, operator_port, use_openmetrics):
137186
return {

0 commit comments

Comments
 (0)