22
22
from typing import Optional , Tuple
23
23
24
24
from elasticsearch import (
25
- AuthorizationException ,
26
25
ConnectionError ,
27
26
Elasticsearch ,
28
- NotFoundError ,
29
27
)
30
28
31
29
SOURCE_DIR = Path (__file__ ).absolute ().parent .parent
@@ -118,40 +116,15 @@ def wipe_cluster(client):
118
116
except ImportError :
119
117
pass
120
118
121
- is_xpack = True
122
- if is_xpack :
123
- wipe_rollup_jobs (client )
124
- wait_for_pending_tasks (client , filter = "xpack/rollup/job" )
125
- wipe_slm_policies (client )
126
-
127
- # Searchable snapshot indices start in 7.8+
128
- if es_version (client ) >= (7 , 8 ):
129
- wipe_searchable_snapshot_indices (client )
130
-
131
119
wipe_snapshots (client )
132
- if is_xpack :
133
- wipe_data_streams (client )
120
+ wipe_data_streams (client )
134
121
wipe_indices (client )
135
122
136
- if is_xpack :
137
- wipe_xpack_templates (client )
138
- else :
139
- client .indices .delete_template (name = "*" )
140
- client .indices .delete_index_template (name = "*" )
141
- client .cluster .delete_component_template (name = "*" )
123
+ client .indices .delete_template (name = "*" )
124
+ client .indices .delete_index_template (name = "*" )
142
125
143
126
wipe_cluster_settings (client )
144
127
145
- if is_xpack :
146
- wipe_ilm_policies (client )
147
- wipe_auto_follow_patterns (client )
148
- wipe_tasks (client )
149
- wipe_node_shutdown_metadata (client )
150
- wait_for_pending_datafeeds_and_jobs (client )
151
- wipe_calendars (client )
152
- wipe_filters (client )
153
- wipe_transforms (client )
154
-
155
128
wait_for_cluster_state_updates_to_finish (client )
156
129
if close_after_wipe :
157
130
client .close ()
@@ -169,16 +142,6 @@ def wipe_cluster_settings(client):
169
142
client .cluster .put_settings (body = new_settings )
170
143
171
144
172
- def wipe_rollup_jobs (client ):
173
- rollup_jobs = client .rollup .get_jobs (id = "_all" ).get ("jobs" , ())
174
- for job in rollup_jobs :
175
- job_id = job ["config" ]["id" ]
176
- client .options (ignore_status = 404 ).rollup .stop_job (
177
- id = job_id , wait_for_completion = True
178
- )
179
- client .options (ignore_status = 404 ).rollup .delete_job (id = job_id )
180
-
181
-
182
145
def wipe_snapshots (client ):
183
146
"""Deletes all the snapshots and repositories from the cluster"""
184
147
in_progress_snapshots = []
@@ -223,259 +186,8 @@ def wipe_indices(client):
223
186
)
224
187
225
188
226
- def wipe_searchable_snapshot_indices (client ):
227
- cluster_metadata = client .cluster .state (
228
- metric = "metadata" ,
229
- filter_path = "metadata.indices.*.settings.index.store.snapshot" ,
230
- )
231
- if cluster_metadata :
232
- for index in cluster_metadata ["metadata" ]["indices" ].keys ():
233
- client .indices .delete (index = index )
234
-
235
-
236
- def wipe_xpack_templates (client ):
237
- # Delete index templates (including legacy)
238
- templates = [
239
- x .strip () for x in client .cat .templates (h = "name" ).split ("\n " ) if x .strip ()
240
- ]
241
- for template in templates :
242
- if is_xpack_template (template ):
243
- continue
244
- try :
245
- client .indices .delete_template (name = template )
246
- except NotFoundError as e :
247
- if f"index_template [{ template } ] missing" in str (e ):
248
- client .indices .delete_index_template (name = template )
249
-
250
- # Delete component templates
251
- templates = client .cluster .get_component_template ()["component_templates" ]
252
- templates_to_delete = [
253
- template ["name" ]
254
- for template in templates
255
- if not is_xpack_template (template ["name" ])
256
- ]
257
- if templates_to_delete :
258
- client .cluster .delete_component_template (name = "," .join (templates_to_delete ))
259
-
260
-
261
- def wipe_ilm_policies (client ):
262
- for policy in client .ilm .get_lifecycle ():
263
- if (
264
- policy
265
- not in {
266
- "ilm-history-ilm-policy" ,
267
- "slm-history-ilm-policy" ,
268
- "watch-history-ilm-policy" ,
269
- "watch-history-ilm-policy-16" ,
270
- "ml-size-based-ilm-policy" ,
271
- "logs" ,
272
- "metrics" ,
273
- "synthetics" ,
274
- "7-days-default" ,
275
- "30-days-default" ,
276
- "90-days-default" ,
277
- "180-days-default" ,
278
- "365-days-default" ,
279
- ".fleet-actions-results-ilm-policy" ,
280
- ".deprecation-indexing-ilm-policy" ,
281
- ".monitoring-8-ilm-policy" ,
282
- }
283
- and "-history-ilm-polcy" not in policy
284
- and "-meta-ilm-policy" not in policy
285
- and "-data-ilm-policy" not in policy
286
- and "@lifecycle" not in policy
287
- ):
288
- client .ilm .delete_lifecycle (name = policy )
289
-
290
-
291
- def wipe_slm_policies (client ):
292
- policies = client .slm .get_lifecycle ()
293
- for policy in policies :
294
- if policy not in {"cloud-snapshot-policy" }:
295
- client .slm .delete_lifecycle (policy_id = policy )
296
-
297
-
298
- def wipe_auto_follow_patterns (client ):
299
- for pattern in client .ccr .get_auto_follow_pattern ()["patterns" ]:
300
- client .ccr .delete_auto_follow_pattern (name = pattern ["name" ])
301
-
302
-
303
- def wipe_node_shutdown_metadata (client ):
304
- try :
305
- shutdown_status = client .shutdown .get_node ()
306
- # If response contains these two keys the feature flag isn't enabled
307
- # on this cluster so skip this step now.
308
- if "_nodes" in shutdown_status and "cluster_name" in shutdown_status :
309
- return
310
-
311
- for shutdown_node in shutdown_status .get ("nodes" , []):
312
- node_id = shutdown_node ["node_id" ]
313
- client .shutdown .delete_node (node_id = node_id )
314
-
315
- # Elastic Cloud doesn't allow this so we skip.
316
- except AuthorizationException :
317
- pass
318
-
319
-
320
- def wipe_tasks (client ):
321
- tasks = client .tasks .list ()
322
- for node_name , node in tasks .get ("node" , {}).items ():
323
- for task_id in node .get ("tasks" , ()):
324
- client .tasks .cancel (task_id = task_id , wait_for_completion = True )
325
-
326
-
327
- def wait_for_pending_tasks (client , filter , timeout = 30 ):
328
- end_time = time .time () + timeout
329
- while time .time () < end_time :
330
- tasks = client .cat .tasks (detailed = True ).split ("\n " )
331
- if not any (filter in task for task in tasks ):
332
- break
333
-
334
-
335
- def wait_for_pending_datafeeds_and_jobs (client : Elasticsearch , timeout = 30 ):
336
- end_time = time .time () + timeout
337
- while time .time () < end_time :
338
- resp = client .ml .get_datafeeds (datafeed_id = "*" , allow_no_match = True )
339
- if resp ["count" ] == 0 :
340
- break
341
- for datafeed in resp ["datafeeds" ]:
342
- client .options (ignore_status = 404 ).ml .delete_datafeed (
343
- datafeed_id = datafeed ["datafeed_id" ]
344
- )
345
-
346
- end_time = time .time () + timeout
347
- while time .time () < end_time :
348
- resp = client .ml .get_jobs (job_id = "*" , allow_no_match = True )
349
- if resp ["count" ] == 0 :
350
- break
351
- for job in resp ["jobs" ]:
352
- client .options (ignore_status = 404 ).ml .close_job (job_id = job ["job_id" ])
353
- client .options (ignore_status = 404 ).ml .delete_job (job_id = job ["job_id" ])
354
-
355
- end_time = time .time () + timeout
356
- while time .time () < end_time :
357
- resp = client .ml .get_data_frame_analytics (id = "*" )
358
- if resp ["count" ] == 0 :
359
- break
360
- for job in resp ["data_frame_analytics" ]:
361
- client .options (ignore_status = 404 ).ml .stop_data_frame_analytics (id = job ["id" ])
362
- client .options (ignore_status = 404 ).ml .delete_data_frame_analytics (
363
- id = job ["id" ]
364
- )
365
-
366
-
367
- def wipe_filters (client : Elasticsearch , timeout = 30 ):
368
- end_time = time .time () + timeout
369
- while time .time () < end_time :
370
- resp = client .ml .get_filters (filter_id = "*" )
371
- if resp ["count" ] == 0 :
372
- break
373
- for filter in resp ["filters" ]:
374
- client .options (ignore_status = 404 ).ml .delete_filter (
375
- filter_id = filter ["filter_id" ]
376
- )
377
-
378
-
379
- def wipe_calendars (client : Elasticsearch , timeout = 30 ):
380
- end_time = time .time () + timeout
381
- while time .time () < end_time :
382
- resp = client .ml .get_calendars (calendar_id = "*" )
383
- if resp ["count" ] == 0 :
384
- break
385
- for calendar in resp ["calendars" ]:
386
- client .options (ignore_status = 404 ).ml .delete_calendar (
387
- calendar_id = calendar ["calendar_id" ]
388
- )
389
-
390
-
391
- def wipe_transforms (client : Elasticsearch , timeout = 30 ):
392
- end_time = time .time () + timeout
393
- while time .time () < end_time :
394
- resp = client .transform .get_transform (transform_id = "*" )
395
- if resp ["count" ] == 0 :
396
- break
397
- for trasnform in resp ["transforms" ]:
398
- client .options (ignore_status = 404 ).transform .stop_transform (
399
- transform_id = trasnform ["id" ]
400
- )
401
- client .options (ignore_status = 404 ).transform .delete_transform (
402
- transform_id = trasnform ["id" ]
403
- )
404
-
405
-
406
189
def wait_for_cluster_state_updates_to_finish (client , timeout = 30 ):
407
190
end_time = time .time () + timeout
408
191
while time .time () < end_time :
409
192
if not client .cluster .pending_tasks ().get ("tasks" , ()):
410
193
break
411
-
412
-
413
- def is_xpack_template (name ):
414
- if name .startswith ("." ):
415
- return True
416
- elif name .startswith ("behavioral_analytics-events" ):
417
- return True
418
- elif name .startswith ("elastic-connectors-" ):
419
- return True
420
- elif name .startswith ("entities_v1_" ):
421
- return True
422
- elif name .endswith ("@ilm" ):
423
- return True
424
- elif name .endswith ("@template" ):
425
- return True
426
-
427
- return name in {
428
- "agentless" ,
429
- "agentless@mappings" ,
430
- "agentless@settings" ,
431
- "apm-10d@lifecycle" ,
432
- "apm-180d@lifecycle" ,
433
- "apm-390d@lifecycle" ,
434
- "apm-90d@lifecycle" ,
435
- "apm@mappings" ,
436
- "apm@settings" ,
437
- "data-streams-mappings" ,
438
- "data-streams@mappings" ,
439
- "elastic-connectors" ,
440
- "ecs@dynamic_templates" ,
441
- "ecs@mappings" ,
442
- "ilm-history-7" ,
443
- "kibana-reporting@settings" ,
444
- "logs" ,
445
- "logs-apm.error@mappings" ,
446
- "logs-apm@settings" ,
447
- "logs-mappings" ,
448
- "logs@mappings" ,
449
- "logs-settings" ,
450
- "logs@settings" ,
451
- "metrics" ,
452
- "metrics-apm@mappings" ,
453
- "metrics-apm.service_destination@mappings" ,
454
- "metrics-apm.service_summary@mappings" ,
455
- "metrics-apm.service_transaction@mappings" ,
456
- "metrics-apm@settings" ,
457
- "metrics-apm.transaction@mappings" ,
458
- "metrics-mappings" ,
459
- "metrics@mappings" ,
460
- "metrics-settings" ,
461
- "metrics@settings" ,
462
- "metrics-tsdb-settings" ,
463
- "metrics@tsdb-settings" ,
464
- "search-acl-filter" ,
465
- "synthetics" ,
466
- "synthetics-mappings" ,
467
- "synthetics@mappings" ,
468
- "synthetics-settings" ,
469
- "synthetics@settings" ,
470
- "traces-apm@mappings" ,
471
- "traces-apm.rum@mappings" ,
472
- "traces@mappings" ,
473
- "traces@settings" ,
474
- # otel
475
- "metrics-otel@mappings" ,
476
- "semconv-resource-to-ecs@mappings" ,
477
- "traces-otel@mappings" ,
478
- "ecs-tsdb@mappings" ,
479
- "logs-otel@mappings" ,
480
- "otel@mappings" ,
481
- }
0 commit comments