runbooks 1.1.3__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.
- runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
- runbooks/cfat/assessment/compliance.py +7 -7
- runbooks/cfat/models.py +6 -2
- runbooks/cfat/tests/__init__.py +6 -1
- runbooks/cli/__init__.py +13 -0
- runbooks/cli/commands/cfat.py +233 -0
- runbooks/cli/commands/finops.py +213 -0
- runbooks/cli/commands/inventory.py +276 -0
- runbooks/cli/commands/operate.py +266 -0
- runbooks/cli/commands/security.py +224 -0
- runbooks/cli/commands/validation.py +411 -0
- runbooks/cli/commands/vpc.py +246 -0
- runbooks/cli/registry.py +95 -0
- runbooks/cloudops/__init__.py +3 -3
- runbooks/cloudops/cost_optimizer.py +6 -6
- runbooks/cloudops/interfaces.py +2 -2
- runbooks/cloudops/mcp_cost_validation.py +3 -3
- runbooks/cloudops/notebook_framework.py +2 -2
- runbooks/common/aws_profile_manager.py +337 -0
- runbooks/common/aws_utils.py +1 -1
- runbooks/common/business_logic.py +3 -3
- runbooks/common/comprehensive_cost_explorer_integration.py +1 -1
- runbooks/common/cross_account_manager.py +1 -1
- runbooks/common/decorators.py +225 -0
- runbooks/common/mcp_cost_explorer_integration.py +2 -2
- runbooks/common/organizations_client.py +1 -1
- runbooks/common/patterns.py +206 -0
- runbooks/common/profile_utils.py +149 -14
- runbooks/common/rich_utils.py +502 -11
- runbooks/finops/README.md +8 -8
- runbooks/finops/__init__.py +4 -4
- runbooks/finops/business_cases.py +3 -3
- runbooks/finops/cost_optimizer.py +4 -4
- runbooks/finops/dashboard_router.py +2 -2
- runbooks/finops/ebs_cost_optimizer.py +4 -4
- runbooks/finops/ebs_optimizer.py +19 -2
- runbooks/finops/enhanced_progress.py +8 -8
- runbooks/finops/enterprise_wrappers.py +7 -7
- runbooks/finops/finops_scenarios.py +11 -11
- runbooks/finops/legacy_migration.py +8 -8
- runbooks/finops/markdown_exporter.py +2 -2
- runbooks/finops/multi_dashboard.py +1 -1
- runbooks/finops/nat_gateway_optimizer.py +1 -1
- runbooks/finops/optimizer.py +6 -6
- runbooks/finops/rds_snapshot_optimizer.py +2 -2
- runbooks/finops/scenario_cli_integration.py +13 -13
- runbooks/finops/scenarios.py +16 -16
- runbooks/finops/single_dashboard.py +10 -10
- runbooks/finops/tests/test_finops_dashboard.py +3 -3
- runbooks/finops/tests/test_reference_images_validation.py +2 -2
- runbooks/finops/tests/test_single_account_features.py +17 -17
- runbooks/finops/tests/validate_test_suite.py +1 -1
- runbooks/finops/validation_framework.py +5 -5
- runbooks/finops/vpc_cleanup_exporter.py +3 -3
- runbooks/finops/vpc_cleanup_optimizer.py +2 -2
- runbooks/finops/workspaces_analyzer.py +1 -1
- runbooks/hitl/enhanced_workflow_engine.py +1 -1
- runbooks/inventory/README.md +3 -3
- runbooks/inventory/Tests/common_test_data.py +30 -30
- runbooks/inventory/collectors/aws_comprehensive.py +28 -11
- runbooks/inventory/collectors/aws_networking.py +2 -2
- runbooks/inventory/discovery.md +2 -2
- runbooks/inventory/find_ec2_security_groups.py +1 -1
- runbooks/inventory/organizations_discovery.py +1 -1
- runbooks/inventory/vpc_analyzer.py +1 -1
- runbooks/inventory/vpc_flow_analyzer.py +2 -2
- runbooks/main.py +143 -9153
- runbooks/metrics/dora_metrics_engine.py +2 -2
- runbooks/operate/mcp_integration.py +1 -1
- runbooks/operate/networking_cost_heatmap.py +4 -2
- runbooks/operate/privatelink_operations.py +1 -1
- runbooks/operate/vpc_endpoints.py +1 -1
- runbooks/operate/vpc_operations.py +2 -2
- runbooks/remediation/commvault_ec2_analysis.py +1 -1
- runbooks/remediation/rds_snapshot_list.py +5 -5
- runbooks/remediation/workspaces_list.py +5 -5
- runbooks/security/integration_test_enterprise_security.py +5 -3
- runbooks/security/run_script.py +1 -1
- runbooks/sre/mcp_reliability_engine.py +6 -6
- runbooks/utils/version_validator.py +1 -1
- runbooks/validation/comprehensive_2way_validator.py +9 -4
- runbooks/vpc/heatmap_engine.py +7 -4
- runbooks/vpc/mcp_no_eni_validator.py +1 -1
- runbooks/vpc/unified_scenarios.py +7 -7
- {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/METADATA +53 -52
- {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/RECORD +90 -78
- {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/WHEEL +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/entry_points.txt +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/licenses/LICENSE +0 -0
- {runbooks-1.1.3.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 (
|
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", "
|
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": "
|
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
|
221
|
-
|
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)
|
@@ -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", "
|
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", "
|
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", "
|
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
|
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
|
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
|
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", "
|
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:
|
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
|
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", "
|
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:
|
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
|
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
|
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=
|
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::
|
604
|
-
account_id=
|
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",
|
runbooks/security/run_script.py
CHANGED
@@ -542,9 +542,9 @@ class MCPReliabilityEngine:
|
|
542
542
|
|
543
543
|
# Initialize with common AWS profiles
|
544
544
|
profiles = [
|
545
|
-
"
|
546
|
-
"
|
547
|
-
"
|
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
|
-
"
|
870
|
-
"
|
871
|
-
"
|
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 = "
|
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
|
850
|
-
|
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
|
1025
|
-
|
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 {
|
runbooks/vpc/heatmap_engine.py
CHANGED
@@ -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
|
188
|
-
|
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
|
254
|
-
|
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:
|
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:
|
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", "
|
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
|
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
|
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": "
|
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
|
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", "
|
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
|