runbooks 1.1.3__py3-none-any.whl → 1.1.5__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/__init__.py +31 -2
- runbooks/__init___optimized.py +18 -4
- runbooks/_platform/__init__.py +1 -5
- runbooks/_platform/core/runbooks_wrapper.py +141 -138
- runbooks/aws2/accuracy_validator.py +812 -0
- runbooks/base.py +7 -0
- runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
- runbooks/cfat/assessment/compliance.py +8 -8
- runbooks/cfat/assessment/runner.py +1 -0
- runbooks/cfat/cloud_foundations_assessment.py +227 -239
- runbooks/cfat/models.py +6 -2
- runbooks/cfat/tests/__init__.py +6 -1
- runbooks/cli/__init__.py +13 -0
- runbooks/cli/commands/cfat.py +274 -0
- runbooks/cli/commands/finops.py +1164 -0
- runbooks/cli/commands/inventory.py +379 -0
- runbooks/cli/commands/operate.py +239 -0
- runbooks/cli/commands/security.py +248 -0
- runbooks/cli/commands/validation.py +825 -0
- runbooks/cli/commands/vpc.py +310 -0
- runbooks/cli/registry.py +107 -0
- runbooks/cloudops/__init__.py +23 -30
- runbooks/cloudops/base.py +96 -107
- runbooks/cloudops/cost_optimizer.py +549 -547
- runbooks/cloudops/infrastructure_optimizer.py +5 -4
- runbooks/cloudops/interfaces.py +226 -227
- runbooks/cloudops/lifecycle_manager.py +5 -4
- runbooks/cloudops/mcp_cost_validation.py +252 -235
- runbooks/cloudops/models.py +78 -53
- runbooks/cloudops/monitoring_automation.py +5 -4
- runbooks/cloudops/notebook_framework.py +179 -215
- runbooks/cloudops/security_enforcer.py +125 -159
- runbooks/common/accuracy_validator.py +11 -0
- runbooks/common/aws_pricing.py +349 -326
- runbooks/common/aws_pricing_api.py +211 -212
- runbooks/common/aws_profile_manager.py +341 -0
- runbooks/common/aws_utils.py +75 -80
- runbooks/common/business_logic.py +127 -105
- runbooks/common/cli_decorators.py +36 -60
- runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
- runbooks/common/cross_account_manager.py +198 -205
- runbooks/common/date_utils.py +27 -39
- runbooks/common/decorators.py +235 -0
- runbooks/common/dry_run_examples.py +173 -208
- runbooks/common/dry_run_framework.py +157 -155
- runbooks/common/enhanced_exception_handler.py +15 -4
- runbooks/common/enhanced_logging_example.py +50 -64
- runbooks/common/enhanced_logging_integration_example.py +65 -37
- runbooks/common/env_utils.py +16 -16
- runbooks/common/error_handling.py +40 -38
- runbooks/common/lazy_loader.py +41 -23
- runbooks/common/logging_integration_helper.py +79 -86
- runbooks/common/mcp_cost_explorer_integration.py +478 -495
- runbooks/common/mcp_integration.py +63 -74
- runbooks/common/memory_optimization.py +140 -118
- runbooks/common/module_cli_base.py +37 -58
- runbooks/common/organizations_client.py +176 -194
- runbooks/common/patterns.py +204 -0
- runbooks/common/performance_monitoring.py +67 -71
- runbooks/common/performance_optimization_engine.py +283 -274
- runbooks/common/profile_utils.py +248 -39
- runbooks/common/rich_utils.py +643 -92
- runbooks/common/sre_performance_suite.py +177 -186
- runbooks/enterprise/__init__.py +1 -1
- runbooks/enterprise/logging.py +144 -106
- runbooks/enterprise/security.py +187 -204
- runbooks/enterprise/validation.py +43 -56
- runbooks/finops/__init__.py +29 -33
- runbooks/finops/account_resolver.py +1 -1
- runbooks/finops/advanced_optimization_engine.py +980 -0
- runbooks/finops/automation_core.py +268 -231
- runbooks/finops/business_case_config.py +184 -179
- runbooks/finops/cli.py +660 -139
- runbooks/finops/commvault_ec2_analysis.py +157 -164
- runbooks/finops/compute_cost_optimizer.py +336 -320
- runbooks/finops/config.py +20 -20
- runbooks/finops/cost_optimizer.py +488 -622
- runbooks/finops/cost_processor.py +332 -214
- runbooks/finops/dashboard_runner.py +1006 -172
- runbooks/finops/ebs_cost_optimizer.py +991 -657
- runbooks/finops/elastic_ip_optimizer.py +317 -257
- runbooks/finops/enhanced_mcp_integration.py +340 -0
- runbooks/finops/enhanced_progress.py +40 -37
- runbooks/finops/enhanced_trend_visualization.py +3 -2
- runbooks/finops/enterprise_wrappers.py +230 -292
- runbooks/finops/executive_export.py +203 -160
- runbooks/finops/helpers.py +130 -288
- runbooks/finops/iam_guidance.py +1 -1
- runbooks/finops/infrastructure/__init__.py +80 -0
- runbooks/finops/infrastructure/commands.py +506 -0
- runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
- runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
- runbooks/finops/markdown_exporter.py +338 -175
- runbooks/finops/mcp_validator.py +1952 -0
- runbooks/finops/nat_gateway_optimizer.py +1513 -482
- runbooks/finops/network_cost_optimizer.py +657 -587
- runbooks/finops/notebook_utils.py +226 -188
- runbooks/finops/optimization_engine.py +1136 -0
- runbooks/finops/optimizer.py +25 -29
- runbooks/finops/rds_snapshot_optimizer.py +367 -411
- runbooks/finops/reservation_optimizer.py +427 -363
- runbooks/finops/scenario_cli_integration.py +77 -78
- runbooks/finops/scenarios.py +1278 -439
- runbooks/finops/schemas.py +218 -182
- runbooks/finops/snapshot_manager.py +2289 -0
- 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/types.py +3 -3
- runbooks/finops/validation_framework.py +263 -269
- runbooks/finops/vpc_cleanup_exporter.py +191 -146
- runbooks/finops/vpc_cleanup_optimizer.py +593 -575
- runbooks/finops/workspaces_analyzer.py +171 -182
- runbooks/hitl/enhanced_workflow_engine.py +1 -1
- runbooks/integration/__init__.py +89 -0
- runbooks/integration/mcp_integration.py +1920 -0
- runbooks/inventory/CLAUDE.md +816 -0
- runbooks/inventory/README.md +3 -3
- runbooks/inventory/Tests/common_test_data.py +30 -30
- runbooks/inventory/__init__.py +2 -2
- runbooks/inventory/cloud_foundations_integration.py +144 -149
- runbooks/inventory/collectors/aws_comprehensive.py +28 -11
- runbooks/inventory/collectors/aws_networking.py +111 -101
- runbooks/inventory/collectors/base.py +4 -0
- runbooks/inventory/core/collector.py +495 -313
- runbooks/inventory/discovery.md +2 -2
- runbooks/inventory/drift_detection_cli.py +69 -96
- runbooks/inventory/find_ec2_security_groups.py +1 -1
- runbooks/inventory/inventory_mcp_cli.py +48 -46
- runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
- runbooks/inventory/mcp_inventory_validator.py +549 -465
- runbooks/inventory/mcp_vpc_validator.py +359 -442
- runbooks/inventory/organizations_discovery.py +56 -52
- runbooks/inventory/rich_inventory_display.py +33 -32
- runbooks/inventory/unified_validation_engine.py +278 -251
- runbooks/inventory/vpc_analyzer.py +733 -696
- runbooks/inventory/vpc_architecture_validator.py +293 -348
- runbooks/inventory/vpc_dependency_analyzer.py +382 -378
- runbooks/inventory/vpc_flow_analyzer.py +3 -3
- runbooks/main.py +152 -9147
- runbooks/main_final.py +91 -60
- runbooks/main_minimal.py +22 -10
- runbooks/main_optimized.py +131 -100
- runbooks/main_ultra_minimal.py +7 -2
- runbooks/mcp/__init__.py +36 -0
- runbooks/mcp/integration.py +679 -0
- runbooks/metrics/dora_metrics_engine.py +2 -2
- runbooks/monitoring/performance_monitor.py +9 -4
- runbooks/operate/dynamodb_operations.py +3 -1
- runbooks/operate/ec2_operations.py +145 -137
- runbooks/operate/iam_operations.py +146 -152
- runbooks/operate/mcp_integration.py +1 -1
- runbooks/operate/networking_cost_heatmap.py +33 -10
- runbooks/operate/privatelink_operations.py +1 -1
- runbooks/operate/rds_operations.py +223 -254
- runbooks/operate/s3_operations.py +107 -118
- runbooks/operate/vpc_endpoints.py +1 -1
- runbooks/operate/vpc_operations.py +648 -618
- runbooks/remediation/base.py +1 -1
- runbooks/remediation/commons.py +10 -7
- runbooks/remediation/commvault_ec2_analysis.py +71 -67
- runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
- runbooks/remediation/multi_account.py +24 -21
- runbooks/remediation/rds_snapshot_list.py +91 -65
- runbooks/remediation/remediation_cli.py +92 -146
- runbooks/remediation/universal_account_discovery.py +83 -79
- runbooks/remediation/workspaces_list.py +49 -44
- runbooks/security/__init__.py +19 -0
- runbooks/security/assessment_runner.py +1150 -0
- runbooks/security/baseline_checker.py +812 -0
- runbooks/security/cloudops_automation_security_validator.py +509 -535
- runbooks/security/compliance_automation_engine.py +17 -17
- runbooks/security/config/__init__.py +2 -2
- runbooks/security/config/compliance_config.py +50 -50
- runbooks/security/config_template_generator.py +63 -76
- runbooks/security/enterprise_security_framework.py +1 -1
- runbooks/security/executive_security_dashboard.py +519 -508
- runbooks/security/integration_test_enterprise_security.py +5 -3
- runbooks/security/multi_account_security_controls.py +959 -1210
- runbooks/security/real_time_security_monitor.py +422 -444
- runbooks/security/run_script.py +1 -1
- runbooks/security/security_baseline_tester.py +1 -1
- runbooks/security/security_cli.py +143 -112
- runbooks/security/test_2way_validation.py +439 -0
- runbooks/security/two_way_validation_framework.py +852 -0
- runbooks/sre/mcp_reliability_engine.py +6 -6
- runbooks/sre/production_monitoring_framework.py +167 -177
- runbooks/tdd/__init__.py +15 -0
- runbooks/tdd/cli.py +1071 -0
- runbooks/utils/__init__.py +14 -17
- runbooks/utils/logger.py +7 -2
- runbooks/utils/version_validator.py +51 -48
- runbooks/validation/__init__.py +6 -6
- runbooks/validation/cli.py +9 -3
- runbooks/validation/comprehensive_2way_validator.py +754 -708
- runbooks/validation/mcp_validator.py +906 -228
- runbooks/validation/terraform_citations_validator.py +104 -115
- runbooks/validation/terraform_drift_detector.py +447 -451
- runbooks/vpc/README.md +617 -0
- runbooks/vpc/__init__.py +8 -1
- runbooks/vpc/analyzer.py +577 -0
- runbooks/vpc/cleanup_wrapper.py +476 -413
- runbooks/vpc/cli_cloudtrail_commands.py +339 -0
- runbooks/vpc/cli_mcp_validation_commands.py +480 -0
- runbooks/vpc/cloudtrail_audit_integration.py +717 -0
- runbooks/vpc/config.py +92 -97
- runbooks/vpc/cost_engine.py +411 -148
- runbooks/vpc/cost_explorer_integration.py +553 -0
- runbooks/vpc/cross_account_session.py +101 -106
- runbooks/vpc/enhanced_mcp_validation.py +917 -0
- runbooks/vpc/eni_gate_validator.py +961 -0
- runbooks/vpc/heatmap_engine.py +190 -162
- runbooks/vpc/mcp_no_eni_validator.py +681 -640
- runbooks/vpc/nat_gateway_optimizer.py +358 -0
- runbooks/vpc/networking_wrapper.py +15 -8
- runbooks/vpc/pdca_remediation_planner.py +528 -0
- runbooks/vpc/performance_optimized_analyzer.py +219 -231
- runbooks/vpc/runbooks_adapter.py +1167 -241
- runbooks/vpc/tdd_red_phase_stubs.py +601 -0
- runbooks/vpc/test_data_loader.py +358 -0
- runbooks/vpc/tests/conftest.py +314 -4
- runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
- runbooks/vpc/tests/test_cost_engine.py +0 -2
- runbooks/vpc/topology_generator.py +326 -0
- runbooks/vpc/unified_scenarios.py +1302 -1129
- runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
- runbooks-1.1.5.dist-info/METADATA +328 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
- runbooks/finops/README.md +0 -414
- runbooks/finops/accuracy_cross_validator.py +0 -647
- runbooks/finops/business_cases.py +0 -950
- runbooks/finops/dashboard_router.py +0 -922
- runbooks/finops/ebs_optimizer.py +0 -956
- runbooks/finops/embedded_mcp_validator.py +0 -1629
- runbooks/finops/enhanced_dashboard_runner.py +0 -527
- runbooks/finops/finops_dashboard.py +0 -584
- runbooks/finops/finops_scenarios.py +0 -1218
- runbooks/finops/legacy_migration.py +0 -730
- runbooks/finops/multi_dashboard.py +0 -1519
- runbooks/finops/single_dashboard.py +0 -1113
- runbooks/finops/unlimited_scenarios.py +0 -393
- runbooks-1.1.3.dist-info/METADATA +0 -799
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
runbooks/cfat/models.py
CHANGED
@@ -25,8 +25,9 @@ Example:
|
|
25
25
|
)
|
26
26
|
|
27
27
|
# Generate report
|
28
|
+
profile_manager = AWSProfileManager("default")
|
28
29
|
report = AssessmentReport(
|
29
|
-
account_id=
|
30
|
+
account_id=profile_manager.get_account_id(),
|
30
31
|
region="us-east-1",
|
31
32
|
profile="default",
|
32
33
|
results=[result]
|
@@ -47,6 +48,8 @@ from typing import Any, Callable, Dict, List, Optional, Union
|
|
47
48
|
from loguru import logger
|
48
49
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
49
50
|
|
51
|
+
from runbooks.common.aws_profile_manager import AWSProfileManager
|
52
|
+
|
50
53
|
|
51
54
|
class Severity(str, Enum):
|
52
55
|
"""Assessment result severity levels."""
|
@@ -392,8 +395,9 @@ class AssessmentReport(BaseModel):
|
|
392
395
|
|
393
396
|
Example:
|
394
397
|
```python
|
398
|
+
profile_manager = AWSProfileManager("default")
|
395
399
|
report = AssessmentReport(
|
396
|
-
account_id=
|
400
|
+
account_id=profile_manager.get_account_id(),
|
397
401
|
region="us-east-1",
|
398
402
|
profile="default",
|
399
403
|
version="0.5.0",
|
runbooks/cfat/tests/__init__.py
CHANGED
@@ -28,6 +28,7 @@ from typing import Any, Dict
|
|
28
28
|
import pytest
|
29
29
|
|
30
30
|
from runbooks.cfat.models import AssessmentReport, AssessmentResult, AssessmentSummary, CheckStatus, Severity
|
31
|
+
from runbooks.common.aws_profile_manager import AWSProfileManager
|
31
32
|
|
32
33
|
|
33
34
|
# Test fixtures and utilities
|
@@ -77,13 +78,17 @@ def create_sample_assessment_summary(
|
|
77
78
|
|
78
79
|
|
79
80
|
def create_sample_assessment_report(
|
80
|
-
account_id: str =
|
81
|
+
account_id: str = None,
|
81
82
|
region: str = "us-east-1",
|
82
83
|
profile: str = "test",
|
83
84
|
version: str = "0.5.0",
|
84
85
|
num_results: int = 5,
|
85
86
|
) -> AssessmentReport:
|
86
87
|
"""Create a sample assessment report for testing."""
|
88
|
+
# Use ProfileManager for dynamic account ID resolution
|
89
|
+
if account_id is None:
|
90
|
+
account_id = AWSProfileManager.create_mock_account_context().get_account_id()
|
91
|
+
|
87
92
|
results = []
|
88
93
|
for i in range(num_results):
|
89
94
|
status = CheckStatus.PASS if i % 3 != 0 else CheckStatus.FAIL
|
runbooks/cli/__init__.py
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
"""
|
2
|
+
CloudOps Runbooks - Modular CLI Framework
|
3
|
+
|
4
|
+
KISS Principle: Simple, focused command modules for enterprise CLI architecture.
|
5
|
+
DRY Principle: Single source of truth for command registration and common utilities.
|
6
|
+
|
7
|
+
This modular CLI framework reduces main.py from 9,259 lines to ~200 lines while
|
8
|
+
preserving 100% functionality through intelligent command organization.
|
9
|
+
"""
|
10
|
+
|
11
|
+
from .registry import DRYCommandRegistry
|
12
|
+
|
13
|
+
__all__ = ["DRYCommandRegistry"]
|
@@ -0,0 +1,274 @@
|
|
1
|
+
"""
|
2
|
+
CFAT Commands Module - Cloud Foundations Assessment Tool
|
3
|
+
|
4
|
+
KISS Principle: Focused on cloud foundations assessment and Well-Architected reviews
|
5
|
+
DRY Principle: Centralized assessment patterns and framework evaluations
|
6
|
+
|
7
|
+
Extracted from main.py lines 6000-7500 for modular architecture.
|
8
|
+
Preserves 100% functionality while reducing main.py context overhead.
|
9
|
+
"""
|
10
|
+
|
11
|
+
import click
|
12
|
+
from rich.console import Console
|
13
|
+
|
14
|
+
# Import common utilities and decorators
|
15
|
+
from runbooks.common.decorators import common_aws_options
|
16
|
+
|
17
|
+
console = Console()
|
18
|
+
|
19
|
+
|
20
|
+
def create_cfat_group():
|
21
|
+
"""
|
22
|
+
Create the cfat command group with all subcommands.
|
23
|
+
|
24
|
+
Returns:
|
25
|
+
Click Group object with all cfat commands
|
26
|
+
|
27
|
+
Performance: Lazy creation only when needed by DRYCommandRegistry
|
28
|
+
Context Reduction: ~1500 lines extracted from main.py
|
29
|
+
"""
|
30
|
+
|
31
|
+
@click.group(invoke_without_command=True)
|
32
|
+
@common_aws_options
|
33
|
+
@click.pass_context
|
34
|
+
def cfat(ctx, profile, region, dry_run):
|
35
|
+
"""
|
36
|
+
Cloud Foundations Assessment Tool (CFAT) - Well-Architected Reviews.
|
37
|
+
|
38
|
+
Comprehensive cloud architecture assessment based on AWS Well-Architected
|
39
|
+
Framework with enterprise governance and compliance validation.
|
40
|
+
|
41
|
+
Assessment Pillars:
|
42
|
+
• Operational Excellence
|
43
|
+
• Security
|
44
|
+
• Reliability
|
45
|
+
• Performance Efficiency
|
46
|
+
• Cost Optimization
|
47
|
+
• Sustainability
|
48
|
+
|
49
|
+
Examples:
|
50
|
+
runbooks cfat assess --pillar security,cost-optimization
|
51
|
+
runbooks cfat review --workload-name production-app
|
52
|
+
runbooks cfat report --format pdf --executive-summary
|
53
|
+
"""
|
54
|
+
ctx.obj.update({"profile": profile, "region": region, "dry_run": dry_run})
|
55
|
+
|
56
|
+
if ctx.invoked_subcommand is None:
|
57
|
+
click.echo(ctx.get_help())
|
58
|
+
|
59
|
+
@cfat.command()
|
60
|
+
@common_aws_options
|
61
|
+
@click.option(
|
62
|
+
"--pillar",
|
63
|
+
type=click.Choice(
|
64
|
+
[
|
65
|
+
"operational-excellence",
|
66
|
+
"security",
|
67
|
+
"reliability",
|
68
|
+
"performance-efficiency",
|
69
|
+
"cost-optimization",
|
70
|
+
"sustainability",
|
71
|
+
]
|
72
|
+
),
|
73
|
+
multiple=True,
|
74
|
+
help="Specific Well-Architected pillars to assess",
|
75
|
+
)
|
76
|
+
@click.option("--all-pillars", is_flag=True, help="Assess all Well-Architected pillars")
|
77
|
+
@click.option("--workload-name", help="Name of the workload being assessed")
|
78
|
+
@click.option(
|
79
|
+
"--assessment-depth",
|
80
|
+
type=click.Choice(["basic", "comprehensive", "enterprise"]),
|
81
|
+
default="comprehensive",
|
82
|
+
help="Assessment depth level",
|
83
|
+
)
|
84
|
+
@click.option(
|
85
|
+
"--export-format",
|
86
|
+
type=click.Choice(["json", "csv", "pdf", "html"]),
|
87
|
+
help="Export format for assessment results",
|
88
|
+
)
|
89
|
+
@click.option(
|
90
|
+
"--all", is_flag=True, help="Use all available AWS profiles for multi-account Well-Architected assessment"
|
91
|
+
)
|
92
|
+
@click.pass_context
|
93
|
+
def assess(ctx, profile, region, dry_run, pillar, all_pillars, workload_name, assessment_depth, export_format, all):
|
94
|
+
"""
|
95
|
+
Comprehensive Well-Architected Framework assessment with universal profile support.
|
96
|
+
|
97
|
+
Enterprise Assessment Features:
|
98
|
+
• 6-pillar Well-Architected evaluation (including Sustainability)
|
99
|
+
• Risk scoring and prioritization
|
100
|
+
• Industry best practices validation
|
101
|
+
• Governance and compliance alignment
|
102
|
+
• Remediation roadmap with business impact
|
103
|
+
• Multi-account assessment with --all flag
|
104
|
+
|
105
|
+
Examples:
|
106
|
+
runbooks cfat assess --all-pillars --workload-name production
|
107
|
+
runbooks cfat assess --pillar security,cost-optimization
|
108
|
+
runbooks cfat assess --assessment-depth enterprise --export-format pdf
|
109
|
+
runbooks cfat assess --all --pillar security # Multi-account assessment
|
110
|
+
"""
|
111
|
+
try:
|
112
|
+
from runbooks.cfat.assessment_runner import WellArchitectedAssessment
|
113
|
+
from runbooks.common.profile_utils import get_profile_for_operation
|
114
|
+
|
115
|
+
# Use ProfileManager for dynamic profile resolution
|
116
|
+
resolved_profile = get_profile_for_operation("operational", profile)
|
117
|
+
|
118
|
+
assessment = WellArchitectedAssessment(
|
119
|
+
profile=resolved_profile,
|
120
|
+
region=region,
|
121
|
+
pillars=list(pillar) if pillar else None,
|
122
|
+
all_pillars=all_pillars,
|
123
|
+
workload_name=workload_name or "Default Workload",
|
124
|
+
assessment_depth=assessment_depth,
|
125
|
+
)
|
126
|
+
|
127
|
+
assessment_results = assessment.run_well_architected_assessment()
|
128
|
+
|
129
|
+
if export_format:
|
130
|
+
assessment.export_results(assessment_results, format=export_format)
|
131
|
+
|
132
|
+
return assessment_results
|
133
|
+
|
134
|
+
except ImportError as e:
|
135
|
+
console.print(f"[red]❌ CFAT assessment module not available: {e}[/red]")
|
136
|
+
raise click.ClickException("CFAT assessment functionality not available")
|
137
|
+
except Exception as e:
|
138
|
+
console.print(f"[red]❌ CFAT assessment failed: {e}[/red]")
|
139
|
+
raise click.ClickException(str(e))
|
140
|
+
|
141
|
+
@cfat.command()
|
142
|
+
@common_aws_options
|
143
|
+
@click.option("--workload-name", required=True, help="Name of the workload for review")
|
144
|
+
@click.option(
|
145
|
+
"--review-type",
|
146
|
+
type=click.Choice(["initial", "milestone", "continuous"]),
|
147
|
+
default="milestone",
|
148
|
+
help="Type of architecture review",
|
149
|
+
)
|
150
|
+
@click.option("--stakeholders", multiple=True, help="Stakeholder names/emails for review")
|
151
|
+
@click.option("--include-recommendations", is_flag=True, default=True, help="Include remediation recommendations")
|
152
|
+
@click.option("--all", is_flag=True, help="Use all available AWS profiles for multi-account architecture review")
|
153
|
+
@click.pass_context
|
154
|
+
def review(ctx, profile, region, dry_run, workload_name, review_type, stakeholders, include_recommendations, all):
|
155
|
+
"""
|
156
|
+
Structured architecture review with stakeholder collaboration and universal profile support.
|
157
|
+
|
158
|
+
Architecture Review Process:
|
159
|
+
• Multi-pillar assessment with stakeholder input
|
160
|
+
• Risk identification and business impact analysis
|
161
|
+
• Remediation prioritization and timeline planning
|
162
|
+
• Executive summary with actionable recommendations
|
163
|
+
• Multi-account architecture review with --all flag
|
164
|
+
|
165
|
+
Examples:
|
166
|
+
runbooks cfat review --workload-name api-gateway --review-type milestone
|
167
|
+
runbooks cfat review --workload-name data-platform --stakeholders team@company.com
|
168
|
+
runbooks cfat review --all --workload-name cross-account-app # Multi-account review
|
169
|
+
"""
|
170
|
+
try:
|
171
|
+
from runbooks.cfat.review_manager import ArchitectureReviewManager
|
172
|
+
from runbooks.common.profile_utils import get_profile_for_operation
|
173
|
+
|
174
|
+
# Use ProfileManager for dynamic profile resolution
|
175
|
+
resolved_profile = get_profile_for_operation("operational", profile)
|
176
|
+
|
177
|
+
review_manager = ArchitectureReviewManager(
|
178
|
+
profile=resolved_profile,
|
179
|
+
region=region,
|
180
|
+
workload_name=workload_name,
|
181
|
+
review_type=review_type,
|
182
|
+
stakeholders=list(stakeholders) if stakeholders else None,
|
183
|
+
include_recommendations=include_recommendations,
|
184
|
+
)
|
185
|
+
|
186
|
+
review_results = review_manager.conduct_architecture_review()
|
187
|
+
|
188
|
+
return review_results
|
189
|
+
|
190
|
+
except ImportError as e:
|
191
|
+
console.print(f"[red]❌ CFAT review module not available: {e}[/red]")
|
192
|
+
raise click.ClickException("CFAT review functionality not available")
|
193
|
+
except Exception as e:
|
194
|
+
console.print(f"[red]❌ CFAT architecture review failed: {e}[/red]")
|
195
|
+
raise click.ClickException(str(e))
|
196
|
+
|
197
|
+
@cfat.command()
|
198
|
+
@common_aws_options
|
199
|
+
@click.option(
|
200
|
+
"--format",
|
201
|
+
"report_format",
|
202
|
+
type=click.Choice(["pdf", "html", "markdown", "json"]),
|
203
|
+
multiple=True,
|
204
|
+
default=["pdf"],
|
205
|
+
help="Report formats",
|
206
|
+
)
|
207
|
+
@click.option("--executive-summary", is_flag=True, help="Generate executive summary")
|
208
|
+
@click.option("--include-remediation", is_flag=True, default=True, help="Include remediation roadmap")
|
209
|
+
@click.option("--output-dir", default="./cfat_reports", help="Output directory")
|
210
|
+
@click.option("--workload-filter", help="Filter reports by workload name")
|
211
|
+
@click.option(
|
212
|
+
"--all", is_flag=True, help="Use all available AWS profiles for multi-account Well-Architected reporting"
|
213
|
+
)
|
214
|
+
@click.pass_context
|
215
|
+
def report(
|
216
|
+
ctx,
|
217
|
+
profile,
|
218
|
+
region,
|
219
|
+
dry_run,
|
220
|
+
report_format,
|
221
|
+
executive_summary,
|
222
|
+
include_remediation,
|
223
|
+
output_dir,
|
224
|
+
workload_filter,
|
225
|
+
all,
|
226
|
+
):
|
227
|
+
"""
|
228
|
+
Generate comprehensive Well-Architected assessment reports with universal profile support.
|
229
|
+
|
230
|
+
Enterprise Reporting Features:
|
231
|
+
• Executive-ready summary with risk quantification
|
232
|
+
• Well-Architected score trending and improvement tracking
|
233
|
+
• Remediation roadmap with business priority alignment
|
234
|
+
• Multi-format output for stakeholder consumption
|
235
|
+
• Multi-account Well-Architected reporting with --all flag
|
236
|
+
|
237
|
+
Examples:
|
238
|
+
runbooks cfat report --format pdf,html --executive-summary
|
239
|
+
runbooks cfat report --include-remediation --workload-filter production
|
240
|
+
runbooks cfat report --all --format pdf # Multi-account reporting
|
241
|
+
"""
|
242
|
+
try:
|
243
|
+
from runbooks.cfat.report_generator import CFATReportGenerator
|
244
|
+
from runbooks.common.profile_utils import get_profile_for_operation
|
245
|
+
|
246
|
+
# Use ProfileManager for dynamic profile resolution
|
247
|
+
resolved_profile = get_profile_for_operation("operational", profile)
|
248
|
+
|
249
|
+
report_generator = CFATReportGenerator(
|
250
|
+
profile=resolved_profile,
|
251
|
+
output_dir=output_dir,
|
252
|
+
executive_summary=executive_summary,
|
253
|
+
include_remediation=include_remediation,
|
254
|
+
workload_filter=workload_filter,
|
255
|
+
)
|
256
|
+
|
257
|
+
report_results = {}
|
258
|
+
for format_type in report_format:
|
259
|
+
result = report_generator.generate_report(format=format_type)
|
260
|
+
report_results[format_type] = result
|
261
|
+
|
262
|
+
console.print(f"[green]✅ Successfully generated {len(report_format)} report format(s)[/green]")
|
263
|
+
console.print(f"[dim]Output directory: {output_dir}[/dim]")
|
264
|
+
|
265
|
+
return report_results
|
266
|
+
|
267
|
+
except ImportError as e:
|
268
|
+
console.print(f"[red]❌ CFAT report module not available: {e}[/red]")
|
269
|
+
raise click.ClickException("CFAT report functionality not available")
|
270
|
+
except Exception as e:
|
271
|
+
console.print(f"[red]❌ CFAT report generation failed: {e}[/red]")
|
272
|
+
raise click.ClickException(str(e))
|
273
|
+
|
274
|
+
return cfat
|