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.
Files changed (247) hide show
  1. runbooks/__init__.py +31 -2
  2. runbooks/__init___optimized.py +18 -4
  3. runbooks/_platform/__init__.py +1 -5
  4. runbooks/_platform/core/runbooks_wrapper.py +141 -138
  5. runbooks/aws2/accuracy_validator.py +812 -0
  6. runbooks/base.py +7 -0
  7. runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
  8. runbooks/cfat/assessment/compliance.py +8 -8
  9. runbooks/cfat/assessment/runner.py +1 -0
  10. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  11. runbooks/cfat/models.py +6 -2
  12. runbooks/cfat/tests/__init__.py +6 -1
  13. runbooks/cli/__init__.py +13 -0
  14. runbooks/cli/commands/cfat.py +274 -0
  15. runbooks/cli/commands/finops.py +1164 -0
  16. runbooks/cli/commands/inventory.py +379 -0
  17. runbooks/cli/commands/operate.py +239 -0
  18. runbooks/cli/commands/security.py +248 -0
  19. runbooks/cli/commands/validation.py +825 -0
  20. runbooks/cli/commands/vpc.py +310 -0
  21. runbooks/cli/registry.py +107 -0
  22. runbooks/cloudops/__init__.py +23 -30
  23. runbooks/cloudops/base.py +96 -107
  24. runbooks/cloudops/cost_optimizer.py +549 -547
  25. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  26. runbooks/cloudops/interfaces.py +226 -227
  27. runbooks/cloudops/lifecycle_manager.py +5 -4
  28. runbooks/cloudops/mcp_cost_validation.py +252 -235
  29. runbooks/cloudops/models.py +78 -53
  30. runbooks/cloudops/monitoring_automation.py +5 -4
  31. runbooks/cloudops/notebook_framework.py +179 -215
  32. runbooks/cloudops/security_enforcer.py +125 -159
  33. runbooks/common/accuracy_validator.py +11 -0
  34. runbooks/common/aws_pricing.py +349 -326
  35. runbooks/common/aws_pricing_api.py +211 -212
  36. runbooks/common/aws_profile_manager.py +341 -0
  37. runbooks/common/aws_utils.py +75 -80
  38. runbooks/common/business_logic.py +127 -105
  39. runbooks/common/cli_decorators.py +36 -60
  40. runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
  41. runbooks/common/cross_account_manager.py +198 -205
  42. runbooks/common/date_utils.py +27 -39
  43. runbooks/common/decorators.py +235 -0
  44. runbooks/common/dry_run_examples.py +173 -208
  45. runbooks/common/dry_run_framework.py +157 -155
  46. runbooks/common/enhanced_exception_handler.py +15 -4
  47. runbooks/common/enhanced_logging_example.py +50 -64
  48. runbooks/common/enhanced_logging_integration_example.py +65 -37
  49. runbooks/common/env_utils.py +16 -16
  50. runbooks/common/error_handling.py +40 -38
  51. runbooks/common/lazy_loader.py +41 -23
  52. runbooks/common/logging_integration_helper.py +79 -86
  53. runbooks/common/mcp_cost_explorer_integration.py +478 -495
  54. runbooks/common/mcp_integration.py +63 -74
  55. runbooks/common/memory_optimization.py +140 -118
  56. runbooks/common/module_cli_base.py +37 -58
  57. runbooks/common/organizations_client.py +176 -194
  58. runbooks/common/patterns.py +204 -0
  59. runbooks/common/performance_monitoring.py +67 -71
  60. runbooks/common/performance_optimization_engine.py +283 -274
  61. runbooks/common/profile_utils.py +248 -39
  62. runbooks/common/rich_utils.py +643 -92
  63. runbooks/common/sre_performance_suite.py +177 -186
  64. runbooks/enterprise/__init__.py +1 -1
  65. runbooks/enterprise/logging.py +144 -106
  66. runbooks/enterprise/security.py +187 -204
  67. runbooks/enterprise/validation.py +43 -56
  68. runbooks/finops/__init__.py +29 -33
  69. runbooks/finops/account_resolver.py +1 -1
  70. runbooks/finops/advanced_optimization_engine.py +980 -0
  71. runbooks/finops/automation_core.py +268 -231
  72. runbooks/finops/business_case_config.py +184 -179
  73. runbooks/finops/cli.py +660 -139
  74. runbooks/finops/commvault_ec2_analysis.py +157 -164
  75. runbooks/finops/compute_cost_optimizer.py +336 -320
  76. runbooks/finops/config.py +20 -20
  77. runbooks/finops/cost_optimizer.py +488 -622
  78. runbooks/finops/cost_processor.py +332 -214
  79. runbooks/finops/dashboard_runner.py +1006 -172
  80. runbooks/finops/ebs_cost_optimizer.py +991 -657
  81. runbooks/finops/elastic_ip_optimizer.py +317 -257
  82. runbooks/finops/enhanced_mcp_integration.py +340 -0
  83. runbooks/finops/enhanced_progress.py +40 -37
  84. runbooks/finops/enhanced_trend_visualization.py +3 -2
  85. runbooks/finops/enterprise_wrappers.py +230 -292
  86. runbooks/finops/executive_export.py +203 -160
  87. runbooks/finops/helpers.py +130 -288
  88. runbooks/finops/iam_guidance.py +1 -1
  89. runbooks/finops/infrastructure/__init__.py +80 -0
  90. runbooks/finops/infrastructure/commands.py +506 -0
  91. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  92. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  93. runbooks/finops/markdown_exporter.py +338 -175
  94. runbooks/finops/mcp_validator.py +1952 -0
  95. runbooks/finops/nat_gateway_optimizer.py +1513 -482
  96. runbooks/finops/network_cost_optimizer.py +657 -587
  97. runbooks/finops/notebook_utils.py +226 -188
  98. runbooks/finops/optimization_engine.py +1136 -0
  99. runbooks/finops/optimizer.py +25 -29
  100. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  101. runbooks/finops/reservation_optimizer.py +427 -363
  102. runbooks/finops/scenario_cli_integration.py +77 -78
  103. runbooks/finops/scenarios.py +1278 -439
  104. runbooks/finops/schemas.py +218 -182
  105. runbooks/finops/snapshot_manager.py +2289 -0
  106. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  107. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  108. runbooks/finops/tests/test_single_account_features.py +17 -17
  109. runbooks/finops/tests/validate_test_suite.py +1 -1
  110. runbooks/finops/types.py +3 -3
  111. runbooks/finops/validation_framework.py +263 -269
  112. runbooks/finops/vpc_cleanup_exporter.py +191 -146
  113. runbooks/finops/vpc_cleanup_optimizer.py +593 -575
  114. runbooks/finops/workspaces_analyzer.py +171 -182
  115. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  116. runbooks/integration/__init__.py +89 -0
  117. runbooks/integration/mcp_integration.py +1920 -0
  118. runbooks/inventory/CLAUDE.md +816 -0
  119. runbooks/inventory/README.md +3 -3
  120. runbooks/inventory/Tests/common_test_data.py +30 -30
  121. runbooks/inventory/__init__.py +2 -2
  122. runbooks/inventory/cloud_foundations_integration.py +144 -149
  123. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  124. runbooks/inventory/collectors/aws_networking.py +111 -101
  125. runbooks/inventory/collectors/base.py +4 -0
  126. runbooks/inventory/core/collector.py +495 -313
  127. runbooks/inventory/discovery.md +2 -2
  128. runbooks/inventory/drift_detection_cli.py +69 -96
  129. runbooks/inventory/find_ec2_security_groups.py +1 -1
  130. runbooks/inventory/inventory_mcp_cli.py +48 -46
  131. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  132. runbooks/inventory/mcp_inventory_validator.py +549 -465
  133. runbooks/inventory/mcp_vpc_validator.py +359 -442
  134. runbooks/inventory/organizations_discovery.py +56 -52
  135. runbooks/inventory/rich_inventory_display.py +33 -32
  136. runbooks/inventory/unified_validation_engine.py +278 -251
  137. runbooks/inventory/vpc_analyzer.py +733 -696
  138. runbooks/inventory/vpc_architecture_validator.py +293 -348
  139. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  140. runbooks/inventory/vpc_flow_analyzer.py +3 -3
  141. runbooks/main.py +152 -9147
  142. runbooks/main_final.py +91 -60
  143. runbooks/main_minimal.py +22 -10
  144. runbooks/main_optimized.py +131 -100
  145. runbooks/main_ultra_minimal.py +7 -2
  146. runbooks/mcp/__init__.py +36 -0
  147. runbooks/mcp/integration.py +679 -0
  148. runbooks/metrics/dora_metrics_engine.py +2 -2
  149. runbooks/monitoring/performance_monitor.py +9 -4
  150. runbooks/operate/dynamodb_operations.py +3 -1
  151. runbooks/operate/ec2_operations.py +145 -137
  152. runbooks/operate/iam_operations.py +146 -152
  153. runbooks/operate/mcp_integration.py +1 -1
  154. runbooks/operate/networking_cost_heatmap.py +33 -10
  155. runbooks/operate/privatelink_operations.py +1 -1
  156. runbooks/operate/rds_operations.py +223 -254
  157. runbooks/operate/s3_operations.py +107 -118
  158. runbooks/operate/vpc_endpoints.py +1 -1
  159. runbooks/operate/vpc_operations.py +648 -618
  160. runbooks/remediation/base.py +1 -1
  161. runbooks/remediation/commons.py +10 -7
  162. runbooks/remediation/commvault_ec2_analysis.py +71 -67
  163. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  164. runbooks/remediation/multi_account.py +24 -21
  165. runbooks/remediation/rds_snapshot_list.py +91 -65
  166. runbooks/remediation/remediation_cli.py +92 -146
  167. runbooks/remediation/universal_account_discovery.py +83 -79
  168. runbooks/remediation/workspaces_list.py +49 -44
  169. runbooks/security/__init__.py +19 -0
  170. runbooks/security/assessment_runner.py +1150 -0
  171. runbooks/security/baseline_checker.py +812 -0
  172. runbooks/security/cloudops_automation_security_validator.py +509 -535
  173. runbooks/security/compliance_automation_engine.py +17 -17
  174. runbooks/security/config/__init__.py +2 -2
  175. runbooks/security/config/compliance_config.py +50 -50
  176. runbooks/security/config_template_generator.py +63 -76
  177. runbooks/security/enterprise_security_framework.py +1 -1
  178. runbooks/security/executive_security_dashboard.py +519 -508
  179. runbooks/security/integration_test_enterprise_security.py +5 -3
  180. runbooks/security/multi_account_security_controls.py +959 -1210
  181. runbooks/security/real_time_security_monitor.py +422 -444
  182. runbooks/security/run_script.py +1 -1
  183. runbooks/security/security_baseline_tester.py +1 -1
  184. runbooks/security/security_cli.py +143 -112
  185. runbooks/security/test_2way_validation.py +439 -0
  186. runbooks/security/two_way_validation_framework.py +852 -0
  187. runbooks/sre/mcp_reliability_engine.py +6 -6
  188. runbooks/sre/production_monitoring_framework.py +167 -177
  189. runbooks/tdd/__init__.py +15 -0
  190. runbooks/tdd/cli.py +1071 -0
  191. runbooks/utils/__init__.py +14 -17
  192. runbooks/utils/logger.py +7 -2
  193. runbooks/utils/version_validator.py +51 -48
  194. runbooks/validation/__init__.py +6 -6
  195. runbooks/validation/cli.py +9 -3
  196. runbooks/validation/comprehensive_2way_validator.py +754 -708
  197. runbooks/validation/mcp_validator.py +906 -228
  198. runbooks/validation/terraform_citations_validator.py +104 -115
  199. runbooks/validation/terraform_drift_detector.py +447 -451
  200. runbooks/vpc/README.md +617 -0
  201. runbooks/vpc/__init__.py +8 -1
  202. runbooks/vpc/analyzer.py +577 -0
  203. runbooks/vpc/cleanup_wrapper.py +476 -413
  204. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  205. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  206. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  207. runbooks/vpc/config.py +92 -97
  208. runbooks/vpc/cost_engine.py +411 -148
  209. runbooks/vpc/cost_explorer_integration.py +553 -0
  210. runbooks/vpc/cross_account_session.py +101 -106
  211. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  212. runbooks/vpc/eni_gate_validator.py +961 -0
  213. runbooks/vpc/heatmap_engine.py +190 -162
  214. runbooks/vpc/mcp_no_eni_validator.py +681 -640
  215. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  216. runbooks/vpc/networking_wrapper.py +15 -8
  217. runbooks/vpc/pdca_remediation_planner.py +528 -0
  218. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  219. runbooks/vpc/runbooks_adapter.py +1167 -241
  220. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  221. runbooks/vpc/test_data_loader.py +358 -0
  222. runbooks/vpc/tests/conftest.py +314 -4
  223. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  224. runbooks/vpc/tests/test_cost_engine.py +0 -2
  225. runbooks/vpc/topology_generator.py +326 -0
  226. runbooks/vpc/unified_scenarios.py +1302 -1129
  227. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  228. runbooks-1.1.5.dist-info/METADATA +328 -0
  229. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
  230. runbooks/finops/README.md +0 -414
  231. runbooks/finops/accuracy_cross_validator.py +0 -647
  232. runbooks/finops/business_cases.py +0 -950
  233. runbooks/finops/dashboard_router.py +0 -922
  234. runbooks/finops/ebs_optimizer.py +0 -956
  235. runbooks/finops/embedded_mcp_validator.py +0 -1629
  236. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  237. runbooks/finops/finops_dashboard.py +0 -584
  238. runbooks/finops/finops_scenarios.py +0 -1218
  239. runbooks/finops/legacy_migration.py +0 -730
  240. runbooks/finops/multi_dashboard.py +0 -1519
  241. runbooks/finops/single_dashboard.py +0 -1113
  242. runbooks/finops/unlimited_scenarios.py +0 -393
  243. runbooks-1.1.3.dist-info/METADATA +0 -799
  244. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  245. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  246. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  247. {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="123456789012",
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="123456789012",
400
+ account_id=profile_manager.get_account_id(),
397
401
  region="us-east-1",
398
402
  profile="default",
399
403
  version="0.5.0",
@@ -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 = "123456789012",
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
@@ -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