runbooks 1.1.2__py3-none-any.whl → 1.1.4__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 (94) hide show
  1. runbooks/__init__.py +1 -1
  2. runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
  3. runbooks/cfat/assessment/compliance.py +7 -7
  4. runbooks/cfat/models.py +6 -2
  5. runbooks/cfat/tests/__init__.py +6 -1
  6. runbooks/cli/__init__.py +13 -0
  7. runbooks/cli/commands/cfat.py +233 -0
  8. runbooks/cli/commands/finops.py +213 -0
  9. runbooks/cli/commands/inventory.py +276 -0
  10. runbooks/cli/commands/operate.py +266 -0
  11. runbooks/cli/commands/security.py +224 -0
  12. runbooks/cli/commands/validation.py +411 -0
  13. runbooks/cli/commands/vpc.py +246 -0
  14. runbooks/cli/registry.py +95 -0
  15. runbooks/cloudops/__init__.py +3 -3
  16. runbooks/cloudops/cost_optimizer.py +164 -28
  17. runbooks/cloudops/interfaces.py +2 -2
  18. runbooks/cloudops/mcp_cost_validation.py +3 -3
  19. runbooks/cloudops/notebook_framework.py +2 -2
  20. runbooks/common/aws_profile_manager.py +337 -0
  21. runbooks/common/aws_utils.py +1 -1
  22. runbooks/common/business_logic.py +3 -3
  23. runbooks/common/comprehensive_cost_explorer_integration.py +1 -1
  24. runbooks/common/cross_account_manager.py +1 -1
  25. runbooks/common/decorators.py +225 -0
  26. runbooks/common/mcp_cost_explorer_integration.py +2 -2
  27. runbooks/common/organizations_client.py +1 -1
  28. runbooks/common/patterns.py +206 -0
  29. runbooks/common/profile_utils.py +149 -14
  30. runbooks/common/rich_utils.py +507 -16
  31. runbooks/finops/README.md +11 -11
  32. runbooks/finops/__init__.py +4 -4
  33. runbooks/finops/business_cases.py +3 -3
  34. runbooks/finops/cli.py +169 -103
  35. runbooks/finops/cost_optimizer.py +4 -4
  36. runbooks/finops/dashboard_router.py +2 -2
  37. runbooks/finops/ebs_cost_optimizer.py +4 -4
  38. runbooks/finops/ebs_optimizer.py +19 -2
  39. runbooks/finops/embedded_mcp_validator.py +101 -23
  40. runbooks/finops/enhanced_progress.py +8 -8
  41. runbooks/finops/enterprise_wrappers.py +7 -7
  42. runbooks/finops/finops_scenarios.py +101 -27
  43. runbooks/finops/legacy_migration.py +8 -8
  44. runbooks/finops/markdown_exporter.py +2 -2
  45. runbooks/finops/multi_dashboard.py +1 -1
  46. runbooks/finops/nat_gateway_optimizer.py +1 -1
  47. runbooks/finops/optimizer.py +6 -6
  48. runbooks/finops/rds_snapshot_optimizer.py +1389 -0
  49. runbooks/finops/scenario_cli_integration.py +13 -13
  50. runbooks/finops/scenarios.py +16 -16
  51. runbooks/finops/single_dashboard.py +10 -10
  52. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  53. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  54. runbooks/finops/tests/test_single_account_features.py +17 -17
  55. runbooks/finops/tests/validate_test_suite.py +1 -1
  56. runbooks/finops/validation_framework.py +5 -5
  57. runbooks/finops/vpc_cleanup_exporter.py +3 -3
  58. runbooks/finops/vpc_cleanup_optimizer.py +3 -3
  59. runbooks/finops/workspaces_analyzer.py +31 -13
  60. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  61. runbooks/inventory/README.md +3 -3
  62. runbooks/inventory/Tests/common_test_data.py +30 -30
  63. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  64. runbooks/inventory/collectors/aws_networking.py +2 -2
  65. runbooks/inventory/discovery.md +2 -2
  66. runbooks/inventory/find_ec2_security_groups.py +1 -1
  67. runbooks/inventory/list_rds_snapshots_aggregator.py +745 -0
  68. runbooks/inventory/organizations_discovery.py +1 -1
  69. runbooks/inventory/vpc_analyzer.py +1 -1
  70. runbooks/inventory/vpc_flow_analyzer.py +2 -2
  71. runbooks/main.py +143 -8882
  72. runbooks/metrics/dora_metrics_engine.py +2 -2
  73. runbooks/operate/mcp_integration.py +1 -1
  74. runbooks/operate/networking_cost_heatmap.py +4 -2
  75. runbooks/operate/privatelink_operations.py +1 -1
  76. runbooks/operate/vpc_endpoints.py +1 -1
  77. runbooks/operate/vpc_operations.py +2 -2
  78. runbooks/remediation/commvault_ec2_analysis.py +1 -1
  79. runbooks/remediation/rds_snapshot_list.py +5 -5
  80. runbooks/remediation/workspaces_list.py +5 -5
  81. runbooks/security/integration_test_enterprise_security.py +5 -3
  82. runbooks/security/run_script.py +1 -1
  83. runbooks/sre/mcp_reliability_engine.py +6 -6
  84. runbooks/utils/version_validator.py +1 -1
  85. runbooks/validation/comprehensive_2way_validator.py +9 -4
  86. runbooks/vpc/heatmap_engine.py +7 -4
  87. runbooks/vpc/mcp_no_eni_validator.py +1 -1
  88. runbooks/vpc/unified_scenarios.py +7 -7
  89. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/METADATA +53 -52
  90. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/RECORD +94 -80
  91. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/WHEEL +0 -0
  92. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/entry_points.txt +0 -0
  93. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/licenses/LICENSE +0 -0
  94. {runbooks-1.1.2.dist-info → runbooks-1.1.4.dist-info}/top_level.txt +0 -0
@@ -3,7 +3,7 @@
3
3
  DORA Metrics Engine for HITL System Optimization
4
4
 
5
5
  Issue #93: HITL System & DORA Metrics Optimization
6
- Priority: High (Sprint 1 Improvements)
6
+ Priority: High (Phase 1 Improvements)
7
7
  Scope: Optimize Human-in-the-Loop system and enhance DORA metrics collection
8
8
  """
9
9
 
@@ -1228,7 +1228,7 @@ async def simulate_dora_metrics_collection(duration_minutes: int = 5) -> Dict:
1228
1228
  deployments = [
1229
1229
  ("deploy-001", "production", "vpc-wrapper", "v1.2.0", "abc123", "manager"),
1230
1230
  ("deploy-002", "staging", "finops-dashboard", "v2.1.0", "def456", "architect"),
1231
- ("deploy-003", "production", "organizations-api", "v1.0.1", "ghi789", "manager"),
1231
+ ("deploy-003", "production", "organizations-api", "latest version", "ghi789", "manager"),
1232
1232
  ]
1233
1233
 
1234
1234
  for dep_id, env, service, version, commit, approver in deployments:
@@ -681,7 +681,7 @@ class MCPIntegrationEngine:
681
681
  "body": self._generate_github_issue_body(deployment_plan),
682
682
  "labels": ["deployment", "production", "cost-optimization", "terminal-5"],
683
683
  "assignees": ["deploy-agent"],
684
- "milestone": "Sprint 2 - Cost Optimization",
684
+ "milestone": "Phase 2 - Cost Optimization",
685
685
  }
686
686
 
687
687
  server_config = self.mcp_servers["github"]
@@ -33,6 +33,7 @@ import pandas as pd
33
33
  from botocore.exceptions import ClientError, NoCredentialsError
34
34
 
35
35
  from ..base import BaseOperation, OperationResult
36
+ from ..common.aws_profile_manager import AWSProfileManager, get_current_account_id
36
37
 
37
38
  logger = logging.getLogger(__name__)
38
39
 
@@ -217,8 +218,9 @@ class NetworkingCostHeatMapOperation(BaseOperation):
217
218
  def _generate_single_account_heat_map(self) -> Dict:
218
219
  """Generate single account heat map"""
219
220
 
220
- # Use environment-driven account ID for universal compatibility
221
- account_id = os.getenv("AWS_ACCOUNT_ID", "123456789012")
221
+ # Use dynamic account ID resolution for universal compatibility
222
+ profile_manager = AWSProfileManager(self.config.single_account_profile)
223
+ account_id = profile_manager.get_account_id()
222
224
 
223
225
  if self._cost_explorer_available():
224
226
  return self._get_real_account_costs(account_id)
@@ -20,7 +20,7 @@ Features:
20
20
 
21
21
  Author: CloudOps Runbooks Team
22
22
  Version: 0.7.8
23
- Enhanced for Sprint 2 VPC Scope Expansion with PrivateLink
23
+ Enhanced for Phase 2 VPC Scope Expansion with PrivateLink
24
24
  """
25
25
 
26
26
  import json
@@ -18,7 +18,7 @@ Features:
18
18
 
19
19
  Author: CloudOps Runbooks Team
20
20
  Version: 0.7.8
21
- Enhanced for Sprint 2 VPC Scope Expansion
21
+ Enhanced for Phase 2 VPC Scope Expansion
22
22
  """
23
23
 
24
24
  import json
@@ -1586,7 +1586,7 @@ class EnhancedVPCNetworkingManager(BaseOperation):
1586
1586
  result = self.create_operation_result(context, "analyze_network_topology", "vpc", "network-topology")
1587
1587
 
1588
1588
  try:
1589
- self.rich_console.print_header("Comprehensive Network Topology Analysis", "v0.9.1")
1589
+ self.rich_console.print_header("Comprehensive Network Topology Analysis", "latest version")
1590
1590
 
1591
1591
  topology_analysis = {
1592
1592
  "timestamp": datetime.now().isoformat(),
@@ -1845,7 +1845,7 @@ class EnhancedVPCNetworkingManager(BaseOperation):
1845
1845
  result = self.create_operation_result(context, "generate_manager_report", "vpc", "manager-report")
1846
1846
 
1847
1847
  try:
1848
- self.rich_console.print_header("Manager Dashboard - VPC Cost Optimization", "v0.9.1")
1848
+ self.rich_console.print_header("Manager Dashboard - VPC Cost Optimization", "latest version")
1849
1849
 
1850
1850
  # First run comprehensive analysis
1851
1851
  analysis_results = self._analyze_network_topology_comprehensive(context, **kwargs)
@@ -113,7 +113,7 @@ def investigate_commvault_ec2(output_file, account, investigate_utilization, day
113
113
 
114
114
  Challenge: Determine if EC2 instances are actively used for backups or idle
115
115
  """
116
- print_header("JIRA FinOps-25: Commvault EC2 Investigation", "v0.9.1")
116
+ print_header("JIRA FinOps-25: Commvault EC2 Investigation", "latest version")
117
117
 
118
118
  # Auto-detect account if not specified
119
119
  if not account:
@@ -1,7 +1,7 @@
1
1
  """
2
2
  RDS Snapshot Lifecycle Analysis - Storage cost optimization and lifecycle management.
3
3
 
4
- Business Case: Enhanced snapshot analysis with cost calculation for $5K-24K annual savings
4
+ Business Case: Enhanced snapshot analysis with cost calculation for measurable range annual savings
5
5
  Target Accounts: 91893567291, 142964829704, 363435891329, 507583929055
6
6
  Focus: 89 manual snapshots causing storage costs and operational clutter
7
7
  Strategic Value: Operational cleanup and cost reduction through automated lifecycle management
@@ -37,7 +37,7 @@ def estimate_snapshot_cost(allocated_storage, storage_type="gp2", days_old=1):
37
37
  """
38
38
  Estimate monthly snapshot storage cost with enhanced accuracy.
39
39
 
40
- JIRA FinOps-23: Enhanced cost estimation for $5K-24K annual savings target
40
+ JIRA FinOps-23: Enhanced cost estimation for measurable range annual savings target
41
41
  Based on AWS RDS snapshot pricing: https://aws.amazon.com/rds/pricing/
42
42
  """
43
43
  # Real-time RDS Snapshot cost from AWS Pricing API - NO hardcoded defaults
@@ -100,10 +100,10 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
100
100
  """
101
101
  Analyze RDS snapshots for lifecycle management and cost optimization.
102
102
 
103
- JIRA FinOps-23: Enhanced RDS snapshots analysis for $5K-24K annual savings
103
+ JIRA FinOps-23: Enhanced RDS snapshots analysis for measurable range annual savings
104
104
  Focus on 89 manual snapshots causing storage costs and operational clutter
105
105
  """
106
- print_header("RDS Snapshot Cost Optimization Analysis", "v0.9.1")
106
+ print_header("RDS Snapshot Cost Optimization Analysis", "latest version")
107
107
 
108
108
  account_info = display_aws_account_info()
109
109
  console.print(f"[cyan]Analyzing RDS snapshots in {account_info}[/cyan]")
@@ -336,7 +336,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
336
336
  else:
337
337
  print_success("✓ No old manual snapshots found")
338
338
 
339
- # Target validation (JIRA FinOps-23: $5K-24K annual savings)
339
+ # Target validation (JIRA FinOps-23: measurable range annual savings)
340
340
  if calculate_savings or analyze:
341
341
  target_min_annual = 5000.0
342
342
  target_max_annual = 24000.0
@@ -26,7 +26,7 @@ def calculate_workspace_monthly_cost(workspace_bundle_id: str, running_mode: str
26
26
  """
27
27
  Calculate monthly cost for WorkSpace based on bundle and running mode.
28
28
 
29
- JIRA FinOps-24: Cost calculations for $12,518 annual savings target
29
+ JIRA FinOps-24: Cost calculations for significant annual savings savings target
30
30
  Based on AWS WorkSpaces pricing: https://aws.amazon.com/workspaces/pricing/
31
31
  """
32
32
  # WorkSpaces pricing by bundle type (monthly USD)
@@ -117,7 +117,7 @@ def get_workspaces(
117
117
  WorkSpaces Resource Optimization: Enhanced cleanup with dynamic cost calculation using business case configuration
118
118
  """
119
119
 
120
- print_header("WorkSpaces Cost Optimization Analysis", "v0.9.1")
120
+ print_header("WorkSpaces Cost Optimization Analysis", "latest version")
121
121
 
122
122
  # HIGH-RISK OPERATION WARNING
123
123
  if delete_unused and not confirm:
@@ -305,13 +305,13 @@ def get_workspaces(
305
305
  if len(unused_workspaces) > 10:
306
306
  console.print(f"[dim]... and {len(unused_workspaces) - 10} more unused WorkSpaces[/dim]")
307
307
 
308
- # Target validation (JIRA FinOps-24: $12,518 annual savings)
308
+ # Target validation (JIRA FinOps-24: significant annual savings savings)
309
309
  if calculate_savings or analyze:
310
310
  target_annual_savings = 12518.0 # JIRA FinOps-24 target
311
311
  if potential_savings_annual >= target_annual_savings * 0.8: # 80% of target
312
- print_success(f"🎯 Target Achievement: {potential_savings_annual/target_annual_savings*100:.1f}% of $12,518 annual savings target")
312
+ print_success(f"🎯 Target Achievement: {potential_savings_annual/target_annual_savings*100:.1f}% of significant annual savings savings target")
313
313
  else:
314
- print_warning(f"📊 Analysis: {potential_savings_annual/target_annual_savings*100:.1f}% of $12,518 annual savings target")
314
+ print_warning(f"📊 Analysis: {potential_savings_annual/target_annual_savings*100:.1f}% of significant annual savings savings target")
315
315
 
316
316
  # Handle deletion of unused WorkSpaces
317
317
  if delete_unused and unused_workspaces:
@@ -41,6 +41,7 @@ from runbooks.security import (
41
41
  ModuleSecurityIntegrator,
42
42
  SecuritySeverity,
43
43
  )
44
+ from runbooks.common.aws_profile_manager import AWSProfileManager
44
45
 
45
46
 
46
47
  class EnterpriseSecurityIntegrationTest:
@@ -530,7 +531,7 @@ class EnterpriseSecurityIntegrationTest:
530
531
  description="Mock security finding for testing",
531
532
  severity=SecuritySeverity.MEDIUM,
532
533
  resource_arn="arn:aws:s3:::test-bucket",
533
- account_id="123456789012",
534
+ account_id=AWSProfileManager.create_mock_account_context().get_account_id(),
534
535
  region="us-east-1",
535
536
  compliance_frameworks=[ComplianceFramework.AWS_WELL_ARCHITECTED],
536
537
  remediation_available=True,
@@ -597,11 +598,12 @@ class EnterpriseSecurityIntegrationTest:
597
598
 
598
599
  from runbooks.security.enterprise_security_framework import AuditTrailEntry
599
600
 
601
+ mock_account_id = AWSProfileManager.create_mock_account_context().get_account_id()
600
602
  test_audit_entry = AuditTrailEntry(
601
603
  operation_id="test-audit-12345",
602
604
  timestamp=datetime.utcnow(),
603
- user_arn="arn:aws:iam::123456789012:user/test-user",
604
- account_id="123456789012",
605
+ user_arn=f"arn:aws:iam::{mock_account_id}:user/test-user",
606
+ account_id=mock_account_id,
605
607
  service="cloudops-security",
606
608
  operation="test_operation",
607
609
  resource_arn="arn:aws:s3:::test-bucket",
@@ -4,7 +4,7 @@
4
4
  AWS Security Baseline Tester Script
5
5
 
6
6
  Date: 2025-01-10
7
- Version: 1.1.0
7
+ Version: latest version
8
8
 
9
9
  This script evaluates AWS account security configurations against a baseline checklist
10
10
  and generates a multilingual report in HTML format.
@@ -542,9 +542,9 @@ class MCPReliabilityEngine:
542
542
 
543
543
  # Initialize with common AWS profiles
544
544
  profiles = [
545
- "ams-admin-Billing-ReadOnlyAccess-909135376185",
546
- "ams-admin-ReadOnlyAccess-909135376185",
547
- "ams-centralised-ops-ReadOnlyAccess-335083429030",
545
+ "${BILLING_PROFILE}",
546
+ "${MANAGEMENT_PROFILE}",
547
+ "${CENTRALISED_OPS_PROFILE}",
548
548
  ]
549
549
 
550
550
  self.embedded_validator = EmbeddedMCPValidator(profiles=profiles)
@@ -866,9 +866,9 @@ class MCPReliabilityEngine:
866
866
  """Validate AWS credentials health for MCP servers."""
867
867
 
868
868
  aws_profiles = [
869
- "ams-admin-Billing-ReadOnlyAccess-909135376185",
870
- "ams-admin-ReadOnlyAccess-909135376185",
871
- "ams-centralised-ops-ReadOnlyAccess-335083429030",
869
+ "${BILLING_PROFILE}",
870
+ "${MANAGEMENT_PROFILE}",
871
+ "${CENTRALISED_OPS_PROFILE}",
872
872
  ]
873
873
 
874
874
  actions = []
@@ -12,7 +12,7 @@ from pathlib import Path
12
12
  from typing import Dict, List, Optional, Tuple
13
13
 
14
14
  # Avoid circular imports by defining central version directly
15
- CENTRAL_VERSION = "1.1.1" # Must match runbooks.__init__.__version__
15
+ CENTRAL_VERSION = "latest version" # Must match runbooks.__init__.__version__
16
16
 
17
17
 
18
18
  class VersionDriftError(Exception):
@@ -47,6 +47,9 @@ from runbooks.common.rich_utils import (
47
47
  create_table, create_progress_bar, format_cost, create_panel, STATUS_INDICATORS
48
48
  )
49
49
 
50
+ # ProfileManager integration for v1.1.x compatibility
51
+ from runbooks.common.aws_profile_manager import AWSProfileManager, get_current_account_id
52
+
50
53
  # Import MCP integration framework
51
54
  from notebooks.mcp_integration import (
52
55
  MCPIntegrationManager, CrossValidationEngine, MCPAWSClient,
@@ -846,8 +849,9 @@ class Comprehensive2WayValidator:
846
849
  }
847
850
  except Exception as e:
848
851
  print_warning(f"Using mock inventory data due to loading error: {e}")
849
- # Use environment-driven account ID for universal compatibility
850
- generic_account_id = os.getenv("AWS_ACCOUNT_ID", "123456789012")
852
+ # Use dynamic account ID for universal compatibility
853
+ profile_manager = AWSProfileManager()
854
+ generic_account_id = profile_manager.get_account_id()
851
855
  generic_region = os.getenv("AWS_DEFAULT_REGION", "us-east-1")
852
856
  return {
853
857
  'resources': [{'Account': generic_account_id, 'Region': generic_region, 'Resource Type': 'S3', 'Resource ID': 'test-bucket', 'Name': 'test', 'Status': 'available'}],
@@ -1021,8 +1025,9 @@ class Comprehensive2WayValidator:
1021
1025
  }
1022
1026
  except Exception as e:
1023
1027
  print_warning(f"Using mock FinOps data due to loading error: {e}")
1024
- # Use environment-driven values for universal compatibility
1025
- generic_account_id = os.getenv("AWS_ACCOUNT_ID", "123456789012")
1028
+ # Use dynamic account ID for universal compatibility
1029
+ profile_manager = AWSProfileManager()
1030
+ generic_account_id = profile_manager.get_account_id()
1026
1031
  mock_cost = float(os.getenv("MOCK_TOTAL_COST", "100.00"))
1027
1032
  current_period = datetime.now().strftime("%Y-%m")
1028
1033
  return {
@@ -17,6 +17,7 @@ from .cost_engine import NetworkingCostEngine
17
17
  from ..common.env_utils import get_required_env_float
18
18
  from ..common.aws_pricing_api import AWSPricingAPI
19
19
  from ..common.rich_utils import console
20
+ from ..common.aws_profile_manager import AWSProfileManager, get_current_account_id
20
21
 
21
22
  logger = logging.getLogger(__name__)
22
23
 
@@ -184,8 +185,9 @@ class NetworkingCostHeatMapEngine:
184
185
  """Generate detailed single account heat map"""
185
186
  logger.info("Generating single account heat map")
186
187
 
187
- # Use environment-driven account ID for universal compatibility
188
- account_id = os.getenv("AWS_ACCOUNT_ID", "123456789012")
188
+ # Use dynamic account ID resolution for universal compatibility
189
+ profile_manager = AWSProfileManager(self.config.profile if hasattr(self.config, 'profile') else None)
190
+ account_id = profile_manager.get_account_id()
189
191
 
190
192
  # Create cost distribution matrix
191
193
  heat_map_matrix = np.zeros((len(self.config.regions), len(NETWORKING_SERVICES)))
@@ -250,8 +252,9 @@ class NetworkingCostHeatMapEngine:
250
252
  aggregated_matrix = np.zeros((len(self.config.regions), len(NETWORKING_SERVICES)))
251
253
  account_breakdown = []
252
254
 
253
- # Dynamic base account ID from environment for universal compatibility
254
- account_id = int(os.getenv("AWS_BASE_ACCOUNT_ID", "100000000000"))
255
+ # Dynamic base account ID from current AWS credentials
256
+ profile_manager = AWSProfileManager(self.config.profile if hasattr(self.config, 'profile') else None)
257
+ account_id = int(profile_manager.get_account_id())
255
258
 
256
259
  for category, details in account_categories.items():
257
260
  for i in range(details["count"]):
@@ -14,7 +14,7 @@ Strategic Framework:
14
14
  - Multi-profile validation across MANAGEMENT, BILLING, and CENTRALISED_OPS profiles
15
15
 
16
16
  Author: CloudOps Runbooks Team - QA Testing Specialist
17
- Version: 0.9.1 - Enterprise VPC Cleanup Campaign
17
+ Version: latest version - Enterprise VPC Cleanup Campaign
18
18
  """
19
19
 
20
20
  import asyncio
@@ -15,7 +15,7 @@ Strategic Framework:
15
15
  - Multi-format export capabilities for stakeholder consumption
16
16
 
17
17
  Author: CloudOps Runbooks Team
18
- Version: 0.9.1 - Enterprise VPC Cleanup Campaign
18
+ Version: latest version - Enterprise VPC Cleanup Campaign
19
19
  """
20
20
 
21
21
  import asyncio
@@ -722,7 +722,7 @@ class VPCScenarioEngine:
722
722
 
723
723
  Returns complete VPC candidate list for 16-column decision table.
724
724
  """
725
- print_header("Enhanced VPC Cleanup Candidate Discovery", "v0.9.9")
725
+ print_header("Enhanced VPC Cleanup Candidate Discovery", "latest version")
726
726
 
727
727
  candidates = []
728
728
  sequence_number = 1
@@ -988,7 +988,7 @@ class VPCScenarioEngine:
988
988
  "",
989
989
  f"**Generated**: {datetime.now().isoformat()} ",
990
990
  f"**Total Candidates**: {len(self.vpc_candidates)} ",
991
- f"**Source**: Jira AWSO-5 + runbooks APIs v0.9.9 + MCP cross-validation ",
991
+ f"**Source**: Jira AWSO-5 + runbooks APIs latest version + MCP cross-validation ",
992
992
  "",
993
993
  "## Status Legend",
994
994
  "- **DELETE (IaC)** = Remove via Infrastructure as Code",
@@ -2399,7 +2399,7 @@ class VPCScenarioEngine:
2399
2399
  - Step 4: Complex Migration (load balancers, TGW, >5 ENI) - HIGH risk, 90 days
2400
2400
  - Step 5: Strategic Review (CIDR overlap, critical VPCs, complex architecture) - CRITICAL risk, 180 days
2401
2401
  """
2402
- print_header("Enhanced 5-Step Business Intelligence Analysis", "Enterprise Framework v0.9.1")
2402
+ print_header("Enhanced 5-Step Business Intelligence Analysis", "Enterprise Framework latest version")
2403
2403
 
2404
2404
  results = {}
2405
2405
  total_vpcs = len(self.vpc_candidates)
@@ -3059,7 +3059,7 @@ class VPCScenarioEngine:
3059
3059
  "profile": self.profile,
3060
3060
  "vpc_candidates_count": len(self.vpc_candidates),
3061
3061
  "mcp_validation_accuracy": self.total_accuracy_score,
3062
- "framework_version": "v0.9.1"
3062
+ "framework_version": "latest version"
3063
3063
  },
3064
3064
  "vpc_candidates": [
3065
3065
  {
@@ -3193,7 +3193,7 @@ class VPCScenarioEngine:
3193
3193
  # Example usage and testing functions
3194
3194
  async def demo_vpc_scenario_engine():
3195
3195
  """Demonstrate enhanced VPC scenario engine functionality with Phase 4 business intelligence."""
3196
- print_header("VPC Scenario Engine Demo - Phase 4 Enhanced Business Intelligence", "Enterprise Framework v0.9.1")
3196
+ print_header("VPC Scenario Engine Demo - Phase 4 Enhanced Business Intelligence", "Enterprise Framework latest version")
3197
3197
 
3198
3198
  # Initialize engine with default profile
3199
3199
  engine = VPCScenarioEngine("default")
@@ -3207,7 +3207,7 @@ async def demo_vpc_scenario_engine():
3207
3207
  print_success(f"MCP Validation completed: {validation_summary['average_accuracy']:.1f}% accuracy (≥99.5% target)")
3208
3208
 
3209
3209
  # Execute enhanced 5-step analysis (Phase 4 implementation)
3210
- print_header("Phase 4: Enhanced 5-Step Business Intelligence Framework", "v0.9.1")
3210
+ print_header("Phase 4: Enhanced 5-Step Business Intelligence Framework", "latest version")
3211
3211
  validation_results = engine.execute_5step_validation_analysis()
3212
3212
 
3213
3213
  # Generate enhanced business impact with quantified metrics