runbooks 1.1.5__py3-none-any.whl → 1.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. runbooks/cli/commands/inventory.py +21 -80
  2. runbooks/common/accuracy_validator.py +6 -12
  3. runbooks/common/mcp_integration.py +38 -7
  4. runbooks/common/rich_utils.py +116 -2
  5. runbooks/inventory/CLAUDE.md +1 -1
  6. runbooks/inventory/aws_decorators.py +2 -3
  7. runbooks/inventory/check_cloudtrail_compliance.py +2 -4
  8. runbooks/inventory/check_controltower_readiness.py +152 -151
  9. runbooks/inventory/check_landingzone_readiness.py +85 -84
  10. runbooks/inventory/core/formatter.py +11 -0
  11. runbooks/inventory/draw_org_structure.py +8 -9
  12. runbooks/inventory/ec2_vpc_utils.py +2 -2
  13. runbooks/inventory/find_cfn_drift_detection.py +5 -7
  14. runbooks/inventory/find_cfn_orphaned_stacks.py +7 -9
  15. runbooks/inventory/find_cfn_stackset_drift.py +5 -6
  16. runbooks/inventory/find_ec2_security_groups.py +48 -42
  17. runbooks/inventory/find_landingzone_versions.py +4 -6
  18. runbooks/inventory/find_vpc_flow_logs.py +7 -9
  19. runbooks/inventory/inventory_modules.py +103 -91
  20. runbooks/inventory/list_cfn_stacks.py +9 -10
  21. runbooks/inventory/list_cfn_stackset_operation_results.py +1 -3
  22. runbooks/inventory/list_cfn_stackset_operations.py +79 -57
  23. runbooks/inventory/list_cfn_stacksets.py +8 -10
  24. runbooks/inventory/list_config_recorders_delivery_channels.py +49 -39
  25. runbooks/inventory/list_ds_directories.py +65 -53
  26. runbooks/inventory/list_ec2_availability_zones.py +2 -4
  27. runbooks/inventory/list_ec2_ebs_volumes.py +32 -35
  28. runbooks/inventory/list_ec2_instances.py +23 -28
  29. runbooks/inventory/list_ecs_clusters_and_tasks.py +26 -34
  30. runbooks/inventory/list_elbs_load_balancers.py +22 -20
  31. runbooks/inventory/list_enis_network_interfaces.py +26 -33
  32. runbooks/inventory/list_guardduty_detectors.py +2 -4
  33. runbooks/inventory/list_iam_policies.py +2 -4
  34. runbooks/inventory/list_iam_roles.py +5 -7
  35. runbooks/inventory/list_iam_saml_providers.py +4 -6
  36. runbooks/inventory/list_lambda_functions.py +38 -38
  37. runbooks/inventory/list_org_accounts.py +6 -8
  38. runbooks/inventory/list_org_accounts_users.py +55 -44
  39. runbooks/inventory/list_rds_db_instances.py +31 -33
  40. runbooks/inventory/list_route53_hosted_zones.py +3 -5
  41. runbooks/inventory/list_servicecatalog_provisioned_products.py +37 -41
  42. runbooks/inventory/list_sns_topics.py +2 -4
  43. runbooks/inventory/list_ssm_parameters.py +4 -7
  44. runbooks/inventory/list_vpc_subnets.py +2 -4
  45. runbooks/inventory/list_vpcs.py +7 -10
  46. runbooks/inventory/mcp_inventory_validator.py +5 -3
  47. runbooks/inventory/organizations_discovery.py +8 -4
  48. runbooks/inventory/recover_cfn_stack_ids.py +7 -8
  49. runbooks/inventory/requirements.txt +0 -1
  50. runbooks/inventory/rich_inventory_display.py +2 -2
  51. runbooks/inventory/run_on_multi_accounts.py +3 -5
  52. runbooks/inventory/unified_validation_engine.py +3 -2
  53. runbooks/inventory/verify_ec2_security_groups.py +1 -1
  54. runbooks/inventory/vpc_analyzer.py +3 -2
  55. runbooks/inventory/vpc_dependency_analyzer.py +2 -2
  56. runbooks/validation/terraform_drift_detector.py +16 -5
  57. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/METADATA +3 -4
  58. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/RECORD +62 -62
  59. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/WHEEL +0 -0
  60. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/entry_points.txt +0 -0
  61. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/licenses/LICENSE +0 -0
  62. {runbooks-1.1.5.dist-info → runbooks-1.1.6.dist-info}/top_level.txt +0 -0
@@ -64,14 +64,11 @@ from time import time
64
64
 
65
65
  from ArgumentsClass import CommonArguments
66
66
  from botocore.exceptions import ClientError
67
- from colorama import Fore, init
67
+ from runbooks.common.rich_utils import console
68
68
  from Inventory_Modules import display_results, find_ssm_parameters2, get_all_credentials
69
- from tqdm.auto import tqdm
70
69
 
71
- init()
72
70
  __version__ = "2024.05.07"
73
71
  begin_time = time()
74
- ERASE_LINE = "\x1b[2K"
75
72
 
76
73
 
77
74
  ##################
@@ -236,7 +233,7 @@ def find_ssm_parameters(f_credentialList):
236
233
  parameter_list.extend(find_ssm_parameters2(credential))
237
234
  # Optional verbose logging for parameter discovery progress (currently commented)
238
235
  # if verbose < 50 or len(parameter_list) == 0:
239
- # print(f"Found a running total of {len(parameter_list)} parameters in account {Fore.RED}{credential['AccountNumber']}{Fore.RESET} in region {Fore.RED}{credential['Region']}{Fore.RESET}")
236
+ # print(f"Found a running total of {len(parameter_list)} parameters in account [red]{credential['AccountNumber']} in region [red]{credential['Region']}")
240
237
  except ClientError as my_Error:
241
238
  # Handle AWS API authorization failures gracefully
242
239
  if "AuthFailure" in str(my_Error):
@@ -404,7 +401,7 @@ if __name__ == "__main__":
404
401
  # Display performance timing metrics for operational optimization
405
402
  if pTiming:
406
403
  print(ERASE_LINE)
407
- print(f"{Fore.GREEN}This script took {time() - begin_time:.2f} seconds{Fore.RESET}")
404
+ print(f"[green]This script took {time() - begin_time:.2f} seconds")
408
405
 
409
406
  print()
410
407
 
@@ -424,7 +421,7 @@ if __name__ == "__main__":
424
421
  # Display completion message and output file information
425
422
  print("Thank you for using this script")
426
423
  print(
427
- f"Your output was saved to {Fore.GREEN}'{pFilename}-{datetime.now().strftime('%y-%m-%d--%H:%M:%S')}'{Fore.RESET}"
424
+ f"Your output was saved to [green]'{pFilename}-{datetime.now().strftime('%y-%m-%d--%H:%M:%S')}'"
428
425
  ) if pFilename is not None else None
429
426
 
430
427
  print()
@@ -76,10 +76,9 @@ from time import time
76
76
  import Inventory_Modules
77
77
  from ArgumentsClass import CommonArguments
78
78
  from botocore.exceptions import ClientError
79
- from colorama import Fore, init
79
+ from runbooks.common.rich_utils import console
80
80
  from Inventory_Modules import display_results, get_all_credentials
81
81
 
82
- init()
83
82
  __version__ = "2024.10.24"
84
83
 
85
84
  # TODO: Add Elastic IPs to this script as well.
@@ -384,7 +383,6 @@ def analyze_results(fSubnetsFound: list):
384
383
  ##################
385
384
 
386
385
 
387
- ERASE_LINE = "\x1b[2K"
388
386
  begin_time = time()
389
387
 
390
388
  if __name__ == "__main__":
@@ -426,7 +424,7 @@ if __name__ == "__main__":
426
424
  analyze_results(SubnetsFound)
427
425
  if pTiming:
428
426
  print(ERASE_LINE)
429
- print(f"{Fore.GREEN}This script completed in {time() - begin_time:.2f} seconds{Fore.RESET}")
427
+ print(f"[green]This script completed in {time() - begin_time:.2f} seconds")
430
428
 
431
429
  print()
432
430
  print("Thank you for using this script")
@@ -62,10 +62,9 @@ from time import time
62
62
  import Inventory_Modules
63
63
  from ArgumentsClass import CommonArguments
64
64
  from botocore.exceptions import ClientError
65
- from colorama import Fore, init
66
65
  from Inventory_Modules import display_results, get_all_credentials
66
+ from runbooks.common.rich_utils import console
67
67
 
68
- init()
69
68
  __version__ = "2024.01.26"
70
69
 
71
70
 
@@ -324,9 +323,9 @@ def find_all_vpcs(fAllCredentials, fDefaultOnly=False):
324
323
 
325
324
  for credential in fAllCredentials:
326
325
  logging.info(f"Beginning to queue data - starting with {credential['AccountId']}")
327
- print(
328
- f"{ERASE_LINE}Checking {credential['AccountId']} in region {credential['Region']} - {PlaceCount + 1} / {len(fAllCredentials)}",
329
- end="\r",
326
+ console.print(
327
+ f"Checking {credential['AccountId']} in region {credential['Region']} - {PlaceCount + 1} / {len(fAllCredentials)}",
328
+ end="",
330
329
  )
331
330
  # for region in fRegionList:
332
331
  try:
@@ -361,8 +360,6 @@ if __name__ == "__main__":
361
360
  verbose = args.loglevel
362
361
  logging.basicConfig(level=verbose, format="[%(filename)s:%(lineno)s - %(funcName)30s() ] %(message)s")
363
362
 
364
- ERASE_LINE = "\x1b[2K"
365
-
366
363
  begin_time = time()
367
364
 
368
365
  NumVpcsFound = 0
@@ -409,9 +406,9 @@ if __name__ == "__main__":
409
406
  logging.info(f"Threads all done - took {time() - begin_time:.2f} seconds")
410
407
 
411
408
  if pTiming:
412
- print(ERASE_LINE)
413
- print(f"{Fore.GREEN}This script took {time() - begin_time:.2f} seconds{Fore.RESET}")
414
- print(ERASE_LINE)
409
+ console.print()
410
+ console.print(f"[green]This script took {time() - begin_time:.2f} seconds[/green]")
411
+ console.print()
415
412
  # Had to do this, because some of the VPCs that show up in the "sorted_AllVPCs" list are actually the same VPC, with a different CIDR range.
416
413
  Num_of_unique_VPCs = len(set([x["VpcId"] for x in sorted_AllVPCs]))
417
414
  print(
@@ -35,12 +35,13 @@ from pathlib import Path
35
35
  from typing import Any, Dict, List, Optional, Tuple, Union
36
36
 
37
37
  import boto3
38
- from rich.console import Console
39
- from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn, TimeElapsedColumn
38
+ from rich.progress import BarColumn, SpinnerColumn, TaskProgressColumn, TextColumn, TimeElapsedColumn
39
+ from runbooks.common.rich_utils import Progress
40
40
  from rich.table import Table
41
41
 
42
42
  from ..common.profile_utils import get_profile_for_operation, resolve_profile_for_operation_silent
43
43
  from ..common.rich_utils import (
44
+ Console,
44
45
  console as rich_console,
45
46
  create_table,
46
47
  format_cost,
@@ -1003,7 +1004,8 @@ class EnhancedMCPValidator:
1003
1004
  with ThreadPoolExecutor(max_workers=min(5, len(self.aws_sessions))) as executor:
1004
1005
  # Submit all validation tasks
1005
1006
  future_to_profile = {}
1006
- for profile, session in self.aws_sessions.items():
1007
+ for profile, session_info in self.aws_sessions.items():
1008
+ session = session_info["session"] # Extract boto3.Session from dict
1007
1009
  future = executor.submit(
1008
1010
  self._validate_profile_with_drift_detection, profile, session, runbooks_inventory
1009
1011
  )
@@ -24,17 +24,21 @@ from typing import Dict, List, Optional, Set, Tuple
24
24
 
25
25
  import boto3
26
26
  from botocore.exceptions import ClientError, NoCredentialsError
27
- from rich.console import Console
28
27
  from rich.panel import Panel
29
- from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn, TimeElapsedColumn
28
+ from rich.progress import BarColumn, SpinnerColumn, TextColumn, TimeElapsedColumn
30
29
  from rich.status import Status
31
30
  from rich.table import Table
32
31
 
33
- # Initialize Rich console
34
- console = Console()
32
+ # Test Mode Support: Use centralized rich_utils for console and Progress (test-aware)
33
+ # Issue: Rich Console/Progress write to StringIO buffer that Click CliRunner closes, causing ValueError
34
+ # Solution: rich_utils provides MockConsole/MockProgress in test mode, Rich components in production
35
+ import os
36
+ import sys
37
+ import re
35
38
 
36
39
  from ..utils.logger import configure_logger
37
40
  from ..common.performance_optimization_engine import get_optimization_engine
41
+ from ..common.rich_utils import console, Progress
38
42
 
39
43
  logger = configure_logger(__name__)
40
44
 
@@ -10,7 +10,7 @@ import Inventory_Modules
10
10
  import simplejson as json
11
11
  from account_class import aws_acct_access
12
12
  from ArgumentsClass import CommonArguments
13
- from colorama import Fore, init
13
+ from runbooks.common.rich_utils import console
14
14
  from Inventory_Modules import get_credentials_for_accounts_in_org
15
15
 
16
16
  """
@@ -18,7 +18,6 @@ This script was created to help solve a testing problem for the "move_stack_inst
18
18
  Originally, that script didn't have built-in recovery, so we needed this script to "recover" those stack-instance ids that might have been lost during the move_stack_instances.py run. However, that script now has built-in recovery, so this script isn't really needed. However, it can still be used to find any stack-instances that have been orphaned from their original stack-set, if that happens.
19
19
  """
20
20
 
21
- init()
22
21
  __version__ = "2024.05.18"
23
22
 
24
23
 
@@ -70,9 +69,9 @@ def setup_auth_and_regions(fProfile: str = None) -> (object, list, list):
70
69
  ChildAccounts = Inventory_Modules.RemoveCoreAccounts(ChildAccounts, pAccountsToSkip)
71
70
  AccountList = [account["AccountId"] for account in ChildAccounts]
72
71
 
73
- print(f"You asked to find stacks with this fragment list: {Fore.RED}{pFragments}{Fore.RESET}")
74
- print(f"\t\tin these accounts: {Fore.RED}{AccountList}{Fore.RESET}")
75
- print(f"\t\tin these regions: {Fore.RED}{RegionList}{Fore.RESET}")
72
+ print(f"You asked to find stacks with this fragment list: [red]{pFragments}")
73
+ print(f"\t\tin these accounts: [red]{AccountList}")
74
+ print(f"\t\tin these regions: [red]{RegionList}")
76
75
  return aws_acct, AccountList, RegionList
77
76
 
78
77
 
@@ -129,7 +128,7 @@ if __name__ == "__main__":
129
128
  Stacks = Inventory_Modules.find_stacks2(cred, region, pFragments)
130
129
  logging.warning(f"Account: {cred['AccountId']} | Region: {region} | Found {len(Stacks)} Stacks")
131
130
  print(
132
- f"{ERASE_LINE}{Fore.RED}Account: {cred['AccountId']} Region: {region} Found {len(Stacks)} Stacks{Fore.RESET} ({item_counter} of {len(AccountList) * len(RegionList)})",
131
+ f"{ERASE_LINE}[red]Account: {cred['AccountId']} Region: {region} Found {len(Stacks)} Stacks ({item_counter} of {len(AccountList) * len(RegionList)})",
133
132
  end="\r",
134
133
  )
135
134
  except Exception as my_Error:
@@ -162,7 +161,7 @@ if __name__ == "__main__":
162
161
  lAccountsAndRegions.append((StacksFound[i]["Account"], StacksFound[i]["Region"]))
163
162
  print(ERASE_LINE)
164
163
  print(
165
- f"{Fore.RED}Looked through {len(StacksFound)} Stacks across {len(AccountList)} accounts across {len(RegionList)} regions{Fore.RESET}"
164
+ f"[red]Looked through {len(StacksFound)} Stacks across {len(AccountList)} accounts across {len(RegionList)} regions"
166
165
  )
167
166
  print()
168
167
  if args.loglevel < 21: # INFO level
@@ -198,7 +197,7 @@ if __name__ == "__main__":
198
197
 
199
198
  if pTiming:
200
199
  print(ERASE_LINE)
201
- print(f"{Fore.GREEN}This script took {time() - begin_time:.2f} seconds{Fore.RESET}")
200
+ print(f"[green]This script took {time() - begin_time:.2f} seconds")
202
201
 
203
202
  print()
204
203
  print("Thanks for using this script...")
@@ -1,7 +1,6 @@
1
1
  boto3>=1.26.84
2
2
  botocore>=1.29.84
3
3
  colorama>=0.4.6
4
- prettytable>=3.6.0
5
4
  simplejson>=3.18.3
6
5
  urllib3>=1.26.14
7
6
  randominfo>=2.0.2
@@ -21,9 +21,9 @@ from datetime import datetime
21
21
  from typing import Any, Dict, List, Optional
22
22
 
23
23
  from rich import box
24
- from rich.console import Console
25
24
  from rich.panel import Panel
26
- from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn
25
+ from rich.progress import BarColumn, SpinnerColumn, TaskProgressColumn, TextColumn
26
+ from runbooks.common.rich_utils import Progress
27
27
  from rich.table import Table
28
28
  from rich.text import Text
29
29
  from rich.tree import Tree
@@ -7,14 +7,12 @@ import Inventory_Modules
7
7
  from account_class import aws_acct_access
8
8
  from ArgumentsClass import CommonArguments
9
9
  from botocore.exceptions import ClientError
10
- from colorama import Fore, init
11
- from rich.console import Console
10
+ from runbooks.common.rich_utils import console
12
11
  from rich.panel import Panel
13
12
 
14
- # Initialize Rich console
15
- console = Console()
13
+ # Initialize Rich console with test mode support
14
+ from runbooks.common.rich_utils import console
16
15
 
17
- init()
18
16
  __version__ = "2023.05.04"
19
17
 
20
18
  parser = CommonArguments()
@@ -38,12 +38,13 @@ from pathlib import Path
38
38
  from typing import Any, Dict, List, Optional, Tuple, Union
39
39
 
40
40
  import boto3
41
- from rich.console import Console
42
- from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn, TimeElapsedColumn
41
+ from rich.progress import BarColumn, SpinnerColumn, TaskProgressColumn, TextColumn, TimeElapsedColumn
42
+ from runbooks.common.rich_utils import Progress
43
43
  from rich.table import Table
44
44
 
45
45
  from ..common.profile_utils import get_profile_for_operation, resolve_profile_for_operation_silent
46
46
  from ..common.rich_utils import (
47
+ Console,
47
48
  console as rich_console,
48
49
  create_table,
49
50
  format_cost,
@@ -1042,7 +1042,7 @@ def display_results(
1042
1042
  ):
1043
1043
  from datetime import datetime
1044
1044
 
1045
- from colorama import Fore, init
1045
+ from runbooks.common.rich_utils import console
1046
1046
 
1047
1047
  init()
1048
1048
  """
@@ -34,9 +34,9 @@ import asyncio
34
34
 
35
35
  import boto3
36
36
  from botocore.exceptions import ClientError
37
- from rich.console import Console
38
37
  from rich.panel import Panel
39
- from rich.progress import Progress, SpinnerColumn, TextColumn
38
+ from rich.progress import SpinnerColumn, TextColumn
39
+ from runbooks.common.rich_utils import Progress
40
40
  from rich.table import Table
41
41
  from rich.tree import Tree
42
42
 
@@ -44,6 +44,7 @@ from runbooks.common.profile_utils import create_operational_session
44
44
  from runbooks.common.cross_account_manager import EnhancedCrossAccountManager, CrossAccountSession
45
45
  from runbooks.common.organizations_client import OrganizationAccount, get_unified_organizations_client
46
46
  from runbooks.common.rich_utils import (
47
+ Console,
47
48
  console,
48
49
  print_header,
49
50
  print_success,
@@ -43,10 +43,10 @@ from typing import Any, Dict, List, Optional, Set, Tuple
43
43
  import hashlib
44
44
  import boto3
45
45
  from botocore.exceptions import ClientError
46
- from rich.console import Console
47
46
  from rich.table import Table
48
47
  from rich.panel import Panel
49
- from rich.progress import Progress, SpinnerColumn, TextColumn
48
+ from rich.progress import SpinnerColumn, TextColumn
49
+ from runbooks.common.rich_utils import Progress
50
50
 
51
51
  from runbooks.common.rich_utils import (
52
52
  console,
@@ -242,6 +242,15 @@ class TerraformDriftDetector:
242
242
  drift_analysis, runbooks_resources, terraform_resources
243
243
  )
244
244
 
245
+ # CRITICAL: Enforce quality gate - block on <99.5% accuracy
246
+ accuracy_score = mcp_validation_result.get("accuracy_score", 0.0)
247
+ if accuracy_score < 99.5:
248
+ error_msg = f"MCP validation accuracy {accuracy_score:.1f}% below required threshold 99.5%"
249
+ console.print(f"[red]❌ MCP Validation FAILED: {accuracy_score:.1f}% < 99.5% required[/red]")
250
+ raise ValueError(error_msg)
251
+
252
+ console.print(f"[green]✅ MCP Validation PASSED: {accuracy_score:.1f}% ≥ 99.5% required[/green]")
253
+
245
254
  # Calculate metrics
246
255
  total_tf = len(terraform_resources)
247
256
  total_rb = len(runbooks_resources)
@@ -272,7 +281,7 @@ class TerraformDriftDetector:
272
281
  total_monthly_cost_impact=cost_metrics.get("total_monthly_cost", 0.0),
273
282
  high_cost_drifts=cost_metrics.get("high_cost_drifts", 0),
274
283
  cost_correlation_coverage=cost_metrics.get("correlation_coverage", 0.0),
275
- mcp_validation_accuracy=mcp_validation_result.get("accuracy_score", 95.0),
284
+ mcp_validation_accuracy=mcp_validation_result.get("accuracy_score", 0.0), # Pessimistic default
276
285
  # Analysis details
277
286
  drift_analysis=drift_analysis,
278
287
  missing_from_terraform=[
@@ -808,24 +817,26 @@ class TerraformDriftDetector:
808
817
  "validation_timestamp": datetime.now().isoformat(),
809
818
  }
810
819
 
811
- # Run MCP validation (simulated high accuracy)
820
+ # Run MCP validation with real accuracy calculation
812
821
  validation_result = await self.mcp_integrator.validate_vpc_operations(validation_data)
813
822
 
814
- # Calculate drift-specific accuracy metrics
815
- accuracy_score = 99.2 # High accuracy for direct comparison
823
+ # Use real accuracy from MCP validation (no hardcoded values)
824
+ accuracy_score = validation_result.accuracy_score # Real calculated accuracy
816
825
 
817
826
  return {
818
827
  "success": validation_result.success,
819
828
  "accuracy_score": accuracy_score,
820
829
  "validation_timestamp": datetime.now().isoformat(),
821
830
  "resources_validated": len(drift_analysis),
831
+ "total_validations": validation_result.performance_metrics.get("total_validations", 0),
832
+ "successful_validations": validation_result.performance_metrics.get("successful_validations", 0),
822
833
  }
823
834
 
824
835
  except Exception as e:
825
836
  print_warning(f"MCP validation error: {str(e)[:50]}...")
826
837
  return {
827
838
  "success": False,
828
- "accuracy_score": 95.0, # Default accuracy
839
+ "accuracy_score": 0.0, # Honest failure - no optimistic defaults
829
840
  "validation_timestamp": datetime.now().isoformat(),
830
841
  "error": str(e),
831
842
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runbooks
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: CloudOps Automation Toolkit with Enhanced Cloud Foundations Assessment for DevOps and SRE teams.
5
5
  Author-email: Maintainers <nnthanh101@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -31,19 +31,18 @@ Requires-Dist: pydantic>=2.10.0
31
31
  Requires-Dist: jinja2>=3.1.4
32
32
  Requires-Dist: werkzeug>=3.1.0
33
33
  Requires-Dist: markdown>=3.7.0
34
- Requires-Dist: prettytable>=3.16.0
35
34
  Requires-Dist: simplejson>=3.20.1
36
35
  Requires-Dist: python-dateutil>=2.9.0
37
36
  Requires-Dist: loguru>=0.7.3
38
- Requires-Dist: tqdm>=4.67.1
39
37
  Requires-Dist: graphviz>=0.20.1
40
- Requires-Dist: rich>=14.0.0
38
+ Requires-Dist: rich>=14.1.0
41
39
  Requires-Dist: reportlab>=3.6.1
42
40
  Requires-Dist: requests>=2.32.0
43
41
  Requires-Dist: packaging>=21.0
44
42
  Requires-Dist: pyyaml>=6.0.2
45
43
  Requires-Dist: jmespath>=1.0.1
46
44
  Requires-Dist: urllib3<1.27,>=1.26.18
45
+ Requires-Dist: openapi-spec-validator>=0.7.2
47
46
  Requires-Dist: mcp>=1.12.3
48
47
  Requires-Dist: pandas>=2.3.1
49
48
  Requires-Dist: ipython>=9.4.0
@@ -85,7 +85,7 @@ runbooks/cli/__init__.py,sha256=9yb8r0P9ipQzaZZPD-NDPeQRtDVWqG7_v_2ru5wPdPU,446
85
85
  runbooks/cli/registry.py,sha256=1hCARcKay2B6atgYSC7X3xGjfXC65_Ep1hJb6buJRJI,3441
86
86
  runbooks/cli/commands/cfat.py,sha256=xL1WG4DmQTOwLL4I8cmnEy5Z82D91iHj0vB7FokTXbg,11041
87
87
  runbooks/cli/commands/finops.py,sha256=xkfbZgZqfqYJX5l_KMmyTFtxMWvdf6iRYrW9l5N3F4o,55451
88
- runbooks/cli/commands/inventory.py,sha256=P5_7_8u8XlSKKHMC3sx0fwlDWBhLsalgNAQVPNy5ZdE,16115
88
+ runbooks/cli/commands/inventory.py,sha256=68sqYvjES-EzmFvVz9CbEX1TeJDsKJ4ojHmsgW8qGo8,13708
89
89
  runbooks/cli/commands/operate.py,sha256=kkSDws1U4SC-5ers6nanBQbsxC6F0xY9--hicr33a3c,10235
90
90
  runbooks/cli/commands/security.py,sha256=Yv3JFqfT4WNulOGtYvhhaxwZtTUOxPwCGDbaCax_KYc,10307
91
91
  runbooks/cli/commands/validation.py,sha256=Vc8y7TcRkrFtdsZZoDkjZ2taS5UuH1e2hSGpRD9Q2_4,38530
@@ -102,7 +102,7 @@ runbooks/cloudops/monitoring_automation.py,sha256=lJ2L9T87lghgTWyb1ehoqJUMFhqB_l
102
102
  runbooks/cloudops/notebook_framework.py,sha256=N_2rItuIkoGyPVI1PhhGT8Q_4YjnWTNz3icFONWjp4U,26461
103
103
  runbooks/cloudops/security_enforcer.py,sha256=w8rZBsHiGAWZpU1UUes05f_sGnGT6ycmp8IO5f8pffw,17136
104
104
  runbooks/common/__init__.py,sha256=4_t9RNNNjxyVuTCQ4rYQv1teQ-eYQ7ibAl-IC66Gkxc,4590
105
- runbooks/common/accuracy_validator.py,sha256=V6o9VBcIU8PRNQC7OGF4LPNHjFlGm1_jlLYb4rt8k-A,45220
105
+ runbooks/common/accuracy_validator.py,sha256=oD6JFd73HU0FyDQWSoeeet_fknLTM1i-Z9EigNWQpNI,45203
106
106
  runbooks/common/aws_pricing.py,sha256=U-DX134a3BZRw_qxX-N-bEagnHcfPk9nSqBGGaaUKqA,66018
107
107
  runbooks/common/aws_pricing_api.py,sha256=jTpcGiZHIEBxo2hmrfQtTNNHgWSkPQelQcm-YyemeWc,20283
108
108
  runbooks/common/aws_profile_manager.py,sha256=jJX2FqssFAcmLf6zRaLGShnSJpN1XK07w3nudUmNYXY,11865
@@ -127,7 +127,7 @@ runbooks/common/lazy_loader.py,sha256=NnKdzt8aeZg-GmHKc9OxoD4HWAZ_MkWAIvbXSAE5vc
127
127
  runbooks/common/logger.py,sha256=fmBtqv-B-0f0ppejwt_KbUWOPQosO74JXgOcKbr0mbs,424
128
128
  runbooks/common/logging_integration_helper.py,sha256=WreUzOD2inedFYUMNXayxW-OnngdFZ6imdItx6EOUZo,12777
129
129
  runbooks/common/mcp_cost_explorer_integration.py,sha256=AD-ibDaYaClpdCPp7yiKqU3vqkG9T0YWs-MxESzrx78,38171
130
- runbooks/common/mcp_integration.py,sha256=egxCj0UuK1NU41P30a3FRWJJr3s9W3moUqjaQkCGsWw,30630
130
+ runbooks/common/mcp_integration.py,sha256=haXtcaxBDzR8sJ8lUTdlHPAL_f3u5Ph_fdBsS2DiVZg,32315
131
131
  runbooks/common/memory_optimization.py,sha256=zEZeq-Tu9f6mdtMY9UgH0Yb6_O4Uo3uCTQIx4SenUGw,20319
132
132
  runbooks/common/module_cli_base.py,sha256=VYG4CyC5wXzZ7BJlxWd9AbykFe1RmJrT--BBDjKz_CM,12194
133
133
  runbooks/common/organizations_client.py,sha256=LpZjFqXcA_RA2mBv9D_UF9LkzZuGOiNv8NtiTfryAOU,20758
@@ -136,7 +136,7 @@ runbooks/common/performance_monitor.py,sha256=YEStVON1uAlmhOVi5XK6kMytUBtKtqeELY
136
136
  runbooks/common/performance_monitoring.py,sha256=59wy6YBejUDCVSbrtgV3s1hGRZg2n9eAq1CKzr_pAiE,17570
137
137
  runbooks/common/performance_optimization_engine.py,sha256=ZqvJ69987YK_-1zEpF8pIvuh6rsu_7ERtgv9Y2mbW8o,48603
138
138
  runbooks/common/profile_utils.py,sha256=i_UD3y5kh627YZl706x1qKKz4rKw6YrbdntrOS5DpZw,20456
139
- runbooks/common/rich_utils.py,sha256=ygrrdmsnUZSAEFK5-_A4WSSU6rajmmIDNHFpo3F2ZsA,50523
139
+ runbooks/common/rich_utils.py,sha256=gZ1MqB5s76pNacZIwCVmgfbI4FQTIL3nTPhc6gpQqp4,54794
140
140
  runbooks/common/sre_performance_suite.py,sha256=qXiyUoHQTL_p4Z9-cPQ-7S2YDQ-1SwWHXXKfaurFEZc,23883
141
141
  runbooks/enterprise/__init__.py,sha256=QPhTFlBC53plDrsSWZxqBezIOsticcvgruO8jRI7V4c,1854
142
142
  runbooks/enterprise/error_handling.py,sha256=0rorz2L3nWl3xMDMiEMgNj8CvM7efABnEIzkMEg4B2g,14505
@@ -209,68 +209,68 @@ runbooks/integration/__init__.py,sha256=HDxKpcJPczaVMt1fqBt0J8xWE9YfF8XBuLY-dila
209
209
  runbooks/integration/mcp_integration.py,sha256=48Za-_bIWi85DtPbVX1m8DslHJDVlBRM1egSciv3ckA,82898
210
210
  runbooks/inventory/.gitignore,sha256=qqVQodfb6iNuPRM7fsl7lvqxrJaatKNQqQmX7s1_PPg,5563
211
211
  runbooks/inventory/ArgumentsClass.py,sha256=BwquO-iYZNS_fVxgASrksanzoAN_NPCzRpTAyohRLX0,8621
212
- runbooks/inventory/CLAUDE.md,sha256=jK0ZGLwnjmQPfxYofvqjlP2v5ovaLR_PWTCWo3IoJSE,32027
212
+ runbooks/inventory/CLAUDE.md,sha256=ngZ76N8ow7aFOmBbvanvrC8x6PJOXO_kNzC48NSQTyQ,32055
213
213
  runbooks/inventory/README.md,sha256=GwkcciZGFTHPb1No-VHhCSu977N1elY7_Ll46xG-yY8,43879
214
214
  runbooks/inventory/__init__.py,sha256=KEdPfmE5SeqC9t81-dpxS5vWeqCdbGb9uWkVxIyNgX0,2644
215
215
  runbooks/inventory/account_class.py,sha256=wvYNeiXHq6tk8Pqa95Aa91zAtuBXcnE51NonzDueuaM,26361
216
216
  runbooks/inventory/all_my_instances_wrapper.py,sha256=B_nHnXOFle6_LU1YnZd38uMZNV6pIONh4EvCyO-lwzw,5723
217
- runbooks/inventory/aws_decorators.py,sha256=_3QWqih_J6tgs7_dnJwp7Al7OI0qImZpFMyO4E-bMZE,8605
218
- runbooks/inventory/check_cloudtrail_compliance.py,sha256=rQGKuJefqBa1LCfTsVgKJ_GiP3HKqgpYX77iclOV2ko,33652
219
- runbooks/inventory/check_controltower_readiness.py,sha256=2elNsYY_PYhcQeyjcnB4NTbZVUrHnXU70OjrzwOpwVI,56076
220
- runbooks/inventory/check_landingzone_readiness.py,sha256=K7UayaO7QRIhNa0ewZk-Ks4iRAjUPVgMFfjkbgHVOYw,35934
217
+ runbooks/inventory/aws_decorators.py,sha256=ZqGJDBKVzp_Sj_-wlTvOEQF6Et0AYRgUsK0-G0cG_Wo,8596
218
+ runbooks/inventory/check_cloudtrail_compliance.py,sha256=w_IEVgxasTg-yrTfUub_zM3Iofl2n1UkDBvKGnM-cB8,33620
219
+ runbooks/inventory/check_controltower_readiness.py,sha256=ekhUNX-dBYqc5FF9MgzaXuB36VWBPbh7jaT7hvDurZ0,55706
220
+ runbooks/inventory/check_landingzone_readiness.py,sha256=wO2lNIeRnaVZNrTor1uoNlk23pHaPb2x9UOXx4RzAEw,35928
221
221
  runbooks/inventory/cloud_foundations_integration.py,sha256=3FFehheuISTf9GZZ_FSgVJKL6lh813nlWdqPyDd7v5Q,15478
222
222
  runbooks/inventory/discovery.md,sha256=oB5NyZ7atB4jbKxyCD_uvIPJnQaOjaGxbzEeKGh2xsc,12111
223
- runbooks/inventory/draw_org_structure.py,sha256=gMrXIs0FQkUCPgTRbTRwgTqLWBNzbcHZ6FFQ5L9hy0k,29769
223
+ runbooks/inventory/draw_org_structure.py,sha256=CodjRUcxMOO1DMFUEKDR6RLBiR_D73Wi82IPFHdnbyk,29658
224
224
  runbooks/inventory/drift_detection_cli.py,sha256=FJ4QZpaKY0gIIz0A3FK471HU3DceCq6DLOa4IJbvatg,12018
225
- runbooks/inventory/ec2_vpc_utils.py,sha256=bQWvEhe6hqxfj-hgpwu_ZZ9YJbfKiEbgJcAFWhwih-M,16627
226
- runbooks/inventory/find_cfn_drift_detection.py,sha256=4kHHu4I6jBHqM9L6lFabMDVTiafaDmhA1UnXsxzgwiw,13169
227
- runbooks/inventory/find_cfn_orphaned_stacks.py,sha256=dV9AABIrD6ccOTnSCTUA6H0t_OOs4EDW_Jn6h3RKReY,38021
228
- runbooks/inventory/find_cfn_stackset_drift.py,sha256=yRGpH8535sXy4hMoh3s5q8IkLhTUuF54urznfRJz8f4,38128
229
- runbooks/inventory/find_ec2_security_groups.py,sha256=3Sc0prR3c5SrR0lAyNZ3pUQ_4vqru7gZj54qwTlRWiA,30965
230
- runbooks/inventory/find_landingzone_versions.py,sha256=4oYfgmH4fJ40F3YuQKAhCcBuLHRgie4fTLCftPaQXhE,10277
231
- runbooks/inventory/find_vpc_flow_logs.py,sha256=BRwjqb4BD0K97uv8cabpn5nN1iL0DmVkClmX01hAfoA,65119
225
+ runbooks/inventory/ec2_vpc_utils.py,sha256=Lx9s_OYQ0eoeads3L3YarQLZWW-3o7S5pvgtLB0ydLE,16625
226
+ runbooks/inventory/find_cfn_drift_detection.py,sha256=OSHHiyDDy-lrbObu0VaGhdZOMibdq1eBK0tcpLCW-Qc,13059
227
+ runbooks/inventory/find_cfn_orphaned_stacks.py,sha256=NZZjqdmyuZMbrkGyLMOOOQqA7qkm94AFwzvL2Pbcg_4,37921
228
+ runbooks/inventory/find_cfn_stackset_drift.py,sha256=04iZhZvd03t9j1vC6tXqbT4sMkpOEG4SFhnxTBRUspk,38068
229
+ runbooks/inventory/find_ec2_security_groups.py,sha256=vUOLjsR9qaqQwaCSm8QDUdOfkTNHJ7WSrpa7e1qxWY0,31556
230
+ runbooks/inventory/find_landingzone_versions.py,sha256=s04fEcxinOR6NQVHgr6UIGeawGURYTaoZJhU-LLv5tE,10168
231
+ runbooks/inventory/find_vpc_flow_logs.py,sha256=WVUhsmzqCSCqG7rYP8K1byNz7odXx48lh33Q7v8SlSw,64908
232
232
  runbooks/inventory/inventory.sh,sha256=WXmBEpi9OpTu24US9LhW5PC-z6jSwTN0jdwlt-p3aok,23939
233
233
  runbooks/inventory/inventory_mcp_cli.py,sha256=MQGHmi33y7Z4_2lwdqmQsgQp6X1N2p7LPT8OSRtpezo,7605
234
- runbooks/inventory/inventory_modules.py,sha256=8zN5GPHwOthkdDSIAZ6RNStJaSFHNYkYF_pabDARWwo,285278
235
- runbooks/inventory/list_cfn_stacks.py,sha256=Drgi_7RUaIZA-Z4L-eMEvmmT6nqlj-oGvwBOGOmRKlw,22399
236
- runbooks/inventory/list_cfn_stackset_operation_results.py,sha256=1kjuv5uL-ioIWa7Dkx45XAEw3aFRClFTG8Qx1r44pSQ,12847
237
- runbooks/inventory/list_cfn_stackset_operations.py,sha256=lYsrZ44xiHkmjKdDQLaVzm7zcabGG91N-7EWtzmWcVU,38317
238
- runbooks/inventory/list_cfn_stacksets.py,sha256=YdEl1VogmbiYOI_fH8XdIlVCoAhk653zWuOrj7zlWos,21794
239
- runbooks/inventory/list_config_recorders_delivery_channels.py,sha256=fCNJPpVCMlKVatrw4JsK3VSplaOkSPqChw2ufkQflQ4,36851
240
- runbooks/inventory/list_ds_directories.py,sha256=6DZZTLHktfEeP0N75Pa0dS6nosReYR_lDwrGn97D0Mw,18923
241
- runbooks/inventory/list_ec2_availability_zones.py,sha256=pXIhKQPyawbSWO78H1x9z15XJ81RwOU2WZd77QOsH5k,12786
242
- runbooks/inventory/list_ec2_ebs_volumes.py,sha256=0r7d1rNbjrbZgAxJBKiT02lF7keadUa9LEgk_pnXpeA,9253
243
- runbooks/inventory/list_ec2_instances.py,sha256=zFtJAPQHpfH1fyFf0YKD34fRZ_be-esUQTedP1zKcgs,18976
244
- runbooks/inventory/list_ecs_clusters_and_tasks.py,sha256=GoUJWb2mSFC7HSPw_s4IfN5QEx3a87SAf9nTGXvPnM4,30547
245
- runbooks/inventory/list_elbs_load_balancers.py,sha256=r9b_KHy_J3AdcRjvq6RN55aWtiEcVXuciiE1O3yBEBY,20425
246
- runbooks/inventory/list_enis_network_interfaces.py,sha256=2qWlSGUxnjsYowREPbL01LKcK3yFASRc8DVuRBCLij4,25840
247
- runbooks/inventory/list_guardduty_detectors.py,sha256=ffBpQ2ZGj9MUkfMBccbJlaGhpE0IfaxuBbgZWgTCiZU,31495
248
- runbooks/inventory/list_iam_policies.py,sha256=swwgmNOBzdM8bZpiaz-jAluvU1lDW2-iuWlwzDVenTU,18247
249
- runbooks/inventory/list_iam_roles.py,sha256=CDU-FgAH67Fwyp7S2F3DRSFwwXDbH0Z9WLsPiwJmlsQ,22095
250
- runbooks/inventory/list_iam_saml_providers.py,sha256=5jXUaWG_ItrLMIFrX-5m3mS2-cYabS03g6zS56q-NL8,16714
251
- runbooks/inventory/list_lambda_functions.py,sha256=lEwLMDmt1E-d28XjzhhGI5CJPY5drMJmMyng1OR9dAg,42879
252
- runbooks/inventory/list_org_accounts.py,sha256=LWcp9DHPvgP_RzqZ-G9e6XKEVKGbvoXqHfzj9cSO250,19149
253
- runbooks/inventory/list_org_accounts_users.py,sha256=Duh8jtpR4WC94OT7b6AnQcywgFe3_nt1VcO08s1al5k,16512
254
- runbooks/inventory/list_rds_db_instances.py,sha256=Mc0NA6Y8PSquwz4sGZMGTjt4Fr4ZZtoUY05IwxLHpVs,17288
234
+ runbooks/inventory/inventory_modules.py,sha256=jSkUkVTon2gWQQ7mHV7MJPzxETDT_Npm-mT8Xgos7SE,286071
235
+ runbooks/inventory/list_cfn_stacks.py,sha256=Ppx0xBK03ygaGEX4ClX1YTfSfBbWvtYooWQnSQU9nD0,22271
236
+ runbooks/inventory/list_cfn_stackset_operation_results.py,sha256=N6MKlDLCu5o2YHgTQURz5pIWt4d1oWu4GVj5M7vXfew,12779
237
+ runbooks/inventory/list_cfn_stackset_operations.py,sha256=75COMEmg-KRHDp3KZjXk1ceRFDwFHgSL0z1-6xjerKE,39256
238
+ runbooks/inventory/list_cfn_stacksets.py,sha256=4SMEpgBUK2zgyYgw4rGVc7uxJ7My4ZOxnIsbvyBft5U,21660
239
+ runbooks/inventory/list_config_recorders_delivery_channels.py,sha256=gbbHeI5kTYtDMOP5RTOtruBqg18rnTwSjorQF9pQgYI,37364
240
+ runbooks/inventory/list_ds_directories.py,sha256=esx7xWWftl4X832PF6bvjGzW09kAErMKFNVryOiyb0Q,19520
241
+ runbooks/inventory/list_ec2_availability_zones.py,sha256=uoHH1ElTRSLycS78u9HKEy4tLoSn4TK0bwwDG3Q4xbQ,12754
242
+ runbooks/inventory/list_ec2_ebs_volumes.py,sha256=I66rK8FVuMmCvOhD66moWqm_2-zpUR6nK8HZqevV1u0,9315
243
+ runbooks/inventory/list_ec2_instances.py,sha256=a57korh33ZTQ3RYiAnnsgXcde0PSrl_sbAAEu6bj4xE,19024
244
+ runbooks/inventory/list_ecs_clusters_and_tasks.py,sha256=SPiBmXz8TB9Xjvrv84i0jLeatqZQTsmANIJ2XedpGrA,30516
245
+ runbooks/inventory/list_elbs_load_balancers.py,sha256=xMohiKQscw1WtZ0CGaKmMKNNQrTnktF6DduETiWfFrA,20665
246
+ runbooks/inventory/list_enis_network_interfaces.py,sha256=ZTYwgeCLAKYlgvacMyrEZGybqPG3RBBT_GaT8tLQdnw,25836
247
+ runbooks/inventory/list_guardduty_detectors.py,sha256=63mhAZrGfzxXfE0zWLX3w4oJ9xeiU6dTpgCEMmAhm1o,31463
248
+ runbooks/inventory/list_iam_policies.py,sha256=6i53PIA-fI_EMnDTSFLBHcP4O36xtMXAqMxfOa-lUhI,18215
249
+ runbooks/inventory/list_iam_roles.py,sha256=EfM2vVVb71kZ5hzob1mVHMVcGV9hso4D-TTHTKLnM9I,22070
250
+ runbooks/inventory/list_iam_saml_providers.py,sha256=UgIzzHJM_XcXR597R_J9xLZzHFEZMV_O76LBfnvindc,16648
251
+ runbooks/inventory/list_lambda_functions.py,sha256=asf942j_iZYX_6yPu04XoN6ctclijUtF_w1NseMDwcw,43049
252
+ runbooks/inventory/list_org_accounts.py,sha256=6qzK8GnPw0i0TmPT8X70uUCmmMOj-8JX-ycXtSq6iXA,19044
253
+ runbooks/inventory/list_org_accounts_users.py,sha256=WcNkUTNALNnWNY_ghuWvHmowieD1WzmnSDEYkOtx59w,17096
254
+ runbooks/inventory/list_rds_db_instances.py,sha256=ibP8pDkdV95hnLU2n9Oal3jRt5jbvrsUTP5ncZVTX0w,17422
255
255
  runbooks/inventory/list_rds_snapshots_aggregator.py,sha256=jNzuMLSOLZ4UKOh-ilSnhOxCwMJkjeIVpaLGnRtT0Uo,32442
256
- runbooks/inventory/list_route53_hosted_zones.py,sha256=-Ypx5Krc6jkj2iiUe0o3SBcH7MvRYuA4xjhly83KwCA,13643
257
- runbooks/inventory/list_servicecatalog_provisioned_products.py,sha256=8nxDdA9ybmFVu974ajf8rmTTlnxLnV_shqaIQfKl62c,27721
258
- runbooks/inventory/list_sns_topics.py,sha256=qn1YlsZtpZSdC7lbFudBZCgW8w8DwUlVpzAW6B99-Z8,15004
259
- runbooks/inventory/list_ssm_parameters.py,sha256=bsKjS-3vm3t9dJuiJprrH8URRXGW5qeKByB-KD9jMRE,20984
260
- runbooks/inventory/list_vpc_subnets.py,sha256=HcKjbmU9mydJhC7QQ4f4C4MzRF6pY9xf-gCdE_42DnI,19001
261
- runbooks/inventory/list_vpcs.py,sha256=b_54AqH_IgpJ_Qe4VcU-XKmvhfmc5rEJBLWldZw2lF4,18120
262
- runbooks/inventory/mcp_inventory_validator.py,sha256=GFcw6KRS_MifXodYRdskXwHnwUStK-jQMClclTWkSbY,100937
256
+ runbooks/inventory/list_route53_hosted_zones.py,sha256=XdDC5CG-KdNQQuewiNkqZQddEKzmHYEL50rz3rAUYSM,13594
257
+ runbooks/inventory/list_servicecatalog_provisioned_products.py,sha256=KZvLVQCV-WzYl4ocT1g-TTSlrypgJOkZwHh9VxrOJU0,27663
258
+ runbooks/inventory/list_sns_topics.py,sha256=-5YdwbhFhW1Yc2EDbJo-L1aNXZRpPihw3wUA9QrFqiY,14972
259
+ runbooks/inventory/list_ssm_parameters.py,sha256=uiaDrrpCcTxlhDmp5rnAi7py-eZnlXBvFywyIZ1B_RA,20874
260
+ runbooks/inventory/list_vpc_subnets.py,sha256=pcZJOJ50hJl7Z2k3r_zCAkV0lYs5hkxhJYn9FsDvieY,18969
261
+ runbooks/inventory/list_vpcs.py,sha256=M_votkoY4k6qvESEXaMIZJZ3rtFp4Y2OLrUtfpX6H4s,18089
262
+ runbooks/inventory/mcp_inventory_validator.py,sha256=Ss6LWPekDcVeR-CnegQ-L2iJ3izv0iRQqcoIqfPr-cA,101049
263
263
  runbooks/inventory/mcp_vpc_validator.py,sha256=A8zAgah9mRiOdeAa5ybd2LhPKL6ORankzGkADJaEIuE,42141
264
- runbooks/inventory/organizations_discovery.py,sha256=6qb4cH1_y8SHlmTQ_GFB56tPdJvwH8_eVWWHohcF36A,65811
265
- runbooks/inventory/recover_cfn_stack_ids.py,sha256=_KgQgDgZRxeyzUb5im6RM-gORZL9WmD03jKpruwp3os,8638
266
- runbooks/inventory/requirements.txt,sha256=W8mvfeKf86CfTIeRJyqa978xJ77Cjfh4mlQ3Gb4YrCc,213
267
- runbooks/inventory/rich_inventory_display.py,sha256=ThUC1akZWT23wMGJ95duRP6OT2i58Z3il87hYZBnP8A,16904
268
- runbooks/inventory/run_on_multi_accounts.py,sha256=yOSATL8N9WUe_TzBRL3MfyHcpqmkj6aWrAqd7FHNLws,9251
269
- runbooks/inventory/unified_validation_engine.py,sha256=nb3EfhDIyZJPLmFcMzEpc5WKo1jzTj3Vc0hx7pfISqc,58190
270
- runbooks/inventory/verify_ec2_security_groups.py,sha256=rAYaBnFxzjEGmrOQlx_Ea-wp7167YBrssoWDWmkE0Pk,68271
271
- runbooks/inventory/vpc_analyzer.py,sha256=XED_sbAwuKOnH_Sbb_zX7r488SI-5XhqFSxX58Th8_4,86185
264
+ runbooks/inventory/organizations_discovery.py,sha256=TE_FJ0ZRim-3lYGkzHSAO33EGSHHhA1vkBtXRqcTQXI,66094
265
+ runbooks/inventory/recover_cfn_stack_ids.py,sha256=LEduYVKNvIuJbdoT4gUCnQzjodhzav8rQNfOTyPaKUw,8544
266
+ runbooks/inventory/requirements.txt,sha256=mUk3CJ8b4A38n2suSSwHXRtJp-D4L4GgMe3S8LPzOWo,194
267
+ runbooks/inventory/rich_inventory_display.py,sha256=r9KkGRBugkEoXAg7RPrw67JwRUYND-AjImJYEmOxFns,16909
268
+ runbooks/inventory/run_on_multi_accounts.py,sha256=Jr-15D8t_fnBWRtjcY3l_n8uvere9J4O75He0AZU5WA,9276
269
+ runbooks/inventory/unified_validation_engine.py,sha256=hAnQD98HbpwTH5OclMaHP2G_vRfxAO-jZ28Vlp8PTcU,58208
270
+ runbooks/inventory/verify_ec2_security_groups.py,sha256=vBBvW4g4QPbHmsY6m5Kw4cxLylDguTCeqV51HdgI8aA,68286
271
+ runbooks/inventory/vpc_analyzer.py,sha256=ICKIVHvL4AAcCzp6WAvej4_g28pcXLWvpJ9a-p8WQkM,86203
272
272
  runbooks/inventory/vpc_architecture_validator.py,sha256=GVrWijyNjAiTJ6onQ-Y7EP2_2zUNqy7aaMzGXzvEofk,36898
273
- runbooks/inventory/vpc_dependency_analyzer.py,sha256=eMO7sWrkbdHkvU-YcmmHDVL2H81yxKU2sMRNSSHiXcM,36245
273
+ runbooks/inventory/vpc_dependency_analyzer.py,sha256=xsaBQYcwGXTZ8KhRihkxYlnRSxSd71dE3c_UiY8pN2w,36250
274
274
  runbooks/inventory/vpc_flow_analyzer.py,sha256=N1oJiHPTfFxX4UUWlLdvmalwbOoDnXjSgEI_sFQjwwM,41753
275
275
  runbooks/inventory/LandingZone/delete_lz.py,sha256=hMwv-T8RTjQQdx9oLelABibFHGD9TFR0xkI_Hgfabw0,48920
276
276
  runbooks/inventory/Tests/common_test_data.py,sha256=FLrOTY3F8NATvBRmi0hUeqFMp3yzAJepYGXrcYlSjeg,180920
@@ -293,7 +293,7 @@ runbooks/inventory/collectors/base.py,sha256=TzuIeVoUE0ri2OISzmKZ1_C0EchEswit_eq
293
293
  runbooks/inventory/collectors/enterprise_scale.py,sha256=hsuN3DIbVbBwzLdHeYYPm_uH5AwN_HZRGVIl0RHwrmA,10968
294
294
  runbooks/inventory/core/__init__.py,sha256=kCH8dKMGp3bAYNPQI7OegiQdglV0G1k36gUtAKT6avE,562
295
295
  runbooks/inventory/core/collector.py,sha256=gc-JpL23cIjnDqIUKqZR3BLYmoQX8dxP41a8o7WUepY,82147
296
- runbooks/inventory/core/formatter.py,sha256=0GTQH8StHenETc0oGB8DRqASB0P1dQMwkLr9oiNATT4,12643
296
+ runbooks/inventory/core/formatter.py,sha256=6xYuYR9eSR-F9RGQhgDeRXI0GzGVDFC0sAUxTPp5dWU,13025
297
297
  runbooks/inventory/models/__init__.py,sha256=LjW8NAHcDeBFvjXjAZwoo73xwQHid8f1-FiEn376omc,788
298
298
  runbooks/inventory/models/account.py,sha256=gsR0o-bHCpCkO_weY3D0cs87FsaysmJmuQhlc2wnCgo,7161
299
299
  runbooks/inventory/models/inventory.py,sha256=1rTPHClwj_q6MJwW3MXFCOcKLzXPa0AYzzXgCeQy8AU,11440
@@ -446,7 +446,7 @@ runbooks/validation/cli.py,sha256=cIfXeime9aV5QeBPltroG1o9fpvZvjeINGFo8hVNfH0,13
446
446
  runbooks/validation/comprehensive_2way_validator.py,sha256=11_D1iYZLvW4kc488IoZIsfPWqkBAz4Cp1wNY8F5X2g,95494
447
447
  runbooks/validation/mcp_validator.py,sha256=RWAY4LE0CVvl2Fd05UjqFSg2c9uhIHLPMCXoXIL8JEk,108785
448
448
  runbooks/validation/terraform_citations_validator.py,sha256=Z1EuNbUln_JDyDTnp6ge0TXpztqrv8FvNlcn0Xo_of8,14510
449
- runbooks/validation/terraform_drift_detector.py,sha256=YDqjfsNCm1qkyofiBLUKwoorTM6RgdOi80EHD-JNk5I,47680
449
+ runbooks/validation/terraform_drift_detector.py,sha256=T-7UDFHBcbEU3Dj_jADP3aU8l6A-1VUJwgQLe6O2eDI,48548
450
450
  runbooks/vpc/README.md,sha256=rqDBp3PlDuzeDlLZCtcz54dftSyK7xFxCtwKM5B0ejA,32196
451
451
  runbooks/vpc/__init__.py,sha256=RSrUBlmkGYll4HgSX9vHOh1Z9jKTyYjgAmrVV9yrtaM,2115
452
452
  runbooks/vpc/analyzer.py,sha256=inxwiyQJMdbc5SzXH2AAFMxQfRosMg2QDT1YDmUMegU,26072
@@ -481,9 +481,9 @@ runbooks/vpc/tests/test_cli_integration.py,sha256=OvsSNd9gFlkzdyDf8tUZGES93TTZR6
481
481
  runbooks/vpc/tests/test_config.py,sha256=GIX7cFnj7xUxxrYX49mV9hYmx60Dcd_Bu-cpb90oXdE,17484
482
482
  runbooks/vpc/tests/test_cost_engine.py,sha256=dR7HTRKDrTduRg5Mr-T7MbP47D67jbKggZ7gyBirfK4,20941
483
483
  runbooks/vpc/tests/test_networking_wrapper.py,sha256=gmxnVzQJ-7rTsghzNLmIM-QZo9GUGyIhHqE1g8gkEkw,20623
484
- runbooks-1.1.5.dist-info/licenses/LICENSE,sha256=WAQUYGIkLJh6CPrlZgr0IsbRODa0EZ6fboBXGjfWggs,11375
485
- runbooks-1.1.5.dist-info/METADATA,sha256=R1tDbdf_dQXG8GXhMybPsodkPXTFT1orjDkadZc9ZYQ,12988
486
- runbooks-1.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
487
- runbooks-1.1.5.dist-info/entry_points.txt,sha256=WahHUYcgE2syXEc0MkoUdctLMxs0zjBWi_vWb5dRK8M,295
488
- runbooks-1.1.5.dist-info/top_level.txt,sha256=A0zTBjuF7THC6vnJU7StN7ihtUoh31lZSfwyWpWP2YE,18
489
- runbooks-1.1.5.dist-info/RECORD,,
484
+ runbooks-1.1.6.dist-info/licenses/LICENSE,sha256=WAQUYGIkLJh6CPrlZgr0IsbRODa0EZ6fboBXGjfWggs,11375
485
+ runbooks-1.1.6.dist-info/METADATA,sha256=oKpQUak9Mq32RQwKEAtKQH8mrUTjlKNMOag-khDzYp4,12970
486
+ runbooks-1.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
487
+ runbooks-1.1.6.dist-info/entry_points.txt,sha256=WahHUYcgE2syXEc0MkoUdctLMxs0zjBWi_vWb5dRK8M,295
488
+ runbooks-1.1.6.dist-info/top_level.txt,sha256=A0zTBjuF7THC6vnJU7StN7ihtUoh31lZSfwyWpWP2YE,18
489
+ runbooks-1.1.6.dist-info/RECORD,,