99from datadog_checks .base .utils .common import get_docker_hostname
1010from datadog_checks .cilium import CiliumCheck
1111from datadog_checks .dev import run_command
12+ from datadog_checks .dev .conditions import WaitFor
1213from datadog_checks .dev .kind import kind_run
1314from datadog_checks .dev .kube_port_forward import port_forward
1415from 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
136185def get_instances (agent_host , agent_port , operator_host , operator_port , use_openmetrics ):
137186 return {
0 commit comments