|
8 | 8 | import json |
9 | 9 | import os |
10 | 10 | import re |
| 11 | +import shlex |
11 | 12 | import subprocess |
12 | 13 | import sys |
13 | 14 | from concurrent.futures import ThreadPoolExecutor, as_completed |
@@ -480,21 +481,31 @@ def cleanup_stack(stack_name, pattern_name): |
480 | 481 |
|
481 | 482 | # CloudWatch log groups |
482 | 483 | print(f"[{pattern_name}] Cleaning up CloudWatch log groups...") |
483 | | - result = run_command(f"aws logs describe-log-groups --query 'logGroups[?contains(logGroupName, `{stack_name}`)].logGroupName' --output text", check=False) |
| 484 | + result = run_command(f"aws logs describe-log-groups --query 'logGroups[?contains(logGroupName, `{stack_name}`)].logGroupName' --output json", check=False) |
484 | 485 | if result.stdout.strip(): |
485 | | - log_group_names = [name for name in result.stdout.strip().split('\t') if name] |
486 | | - for log_group_name in log_group_names: |
487 | | - print(f"[{pattern_name}] Deleting log group: {log_group_name}") |
488 | | - run_command(f"aws logs delete-log-group --log-group-name '{log_group_name}'", check=False) |
| 486 | + try: |
| 487 | + import json |
| 488 | + log_group_names = json.loads(result.stdout.strip()) |
| 489 | + for log_group_name in log_group_names: |
| 490 | + if log_group_name: # Skip empty names |
| 491 | + print(f"[{pattern_name}] Deleting log group: {log_group_name}") |
| 492 | + run_command(f"aws logs delete-log-group --log-group-name {shlex.quote(log_group_name)}", check=False) |
| 493 | + except json.JSONDecodeError: |
| 494 | + print(f"[{pattern_name}] Failed to parse log group names") |
489 | 495 |
|
490 | 496 | # AppSync logs |
491 | 497 | print(f"[{pattern_name}] Cleaning up AppSync logs...") |
492 | | - result = run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output text", check=False) |
| 498 | + result = run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output json", check=False) |
493 | 499 | if result.stdout.strip(): |
494 | | - api_ids = [api_id for api_id in result.stdout.strip().split('\t') if api_id] |
495 | | - for api_id in api_ids: |
496 | | - print(f"[{pattern_name}] Deleting AppSync log group for API: {api_id}") |
497 | | - run_command(f"aws logs delete-log-group --log-group-name '/aws/appsync/apis/{api_id}'", check=False) |
| 500 | + try: |
| 501 | + import json |
| 502 | + api_ids = json.loads(result.stdout.strip()) |
| 503 | + for api_id in api_ids: |
| 504 | + if api_id: # Skip empty IDs |
| 505 | + print(f"[{pattern_name}] Deleting AppSync log group for API: {api_id}") |
| 506 | + run_command(f"aws logs delete-log-group --log-group-name {shlex.quote(f'/aws/appsync/apis/{api_id}')}", check=False) |
| 507 | + except json.JSONDecodeError: |
| 508 | + print(f"[{pattern_name}] Failed to parse AppSync API IDs") |
498 | 509 |
|
499 | 510 | # Clean up CloudWatch Logs Resource Policy only if stack-specific |
500 | 511 | print(f"[{pattern_name}] Checking CloudWatch resource policies...") |
|
0 commit comments