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
@@ -0,0 +1,310 @@
1
+ """
2
+ VPC Commands Module - Network Operations & Cost Optimization
3
+
4
+ KISS Principle: Focused on VPC networking operations and cost optimization
5
+ DRY Principle: Centralized networking patterns and cost analysis
6
+
7
+ Extracted from main.py lines 7500-9000 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, common_output_options
16
+
17
+ console = Console()
18
+
19
+
20
+ def create_vpc_group():
21
+ """
22
+ Create the vpc command group with all subcommands.
23
+
24
+ Returns:
25
+ Click Group object with all vpc 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 vpc(ctx, profile, region, dry_run):
35
+ """
36
+ VPC networking operations and cost optimization.
37
+
38
+ Comprehensive VPC analysis, network cost optimization, and topology
39
+ management with enterprise-grade safety and reporting capabilities.
40
+
41
+ Network Operations:
42
+ • VPC cost analysis and optimization recommendations
43
+ • NAT Gateway rightsizing and cost reduction
44
+ • Network topology analysis and security assessment
45
+ • Multi-account network discovery and management
46
+
47
+ Examples:
48
+ runbooks vpc analyze --cost-optimization
49
+ runbooks vpc nat-gateway --analyze --savings-target 0.3
50
+ runbooks vpc topology --export-format pdf
51
+ """
52
+ ctx.obj.update({"profile": profile, "region": region, "dry_run": dry_run})
53
+
54
+ if ctx.invoked_subcommand is None:
55
+ click.echo(ctx.get_help())
56
+
57
+ @vpc.command()
58
+ @common_aws_options
59
+ @common_output_options
60
+ @click.option("--cost-optimization", is_flag=True, help="Include cost optimization analysis")
61
+ @click.option("--topology-analysis", is_flag=True, help="Include network topology analysis")
62
+ @click.option("--security-assessment", is_flag=True, help="Include security configuration review")
63
+ @click.option(
64
+ "--savings-target",
65
+ type=click.FloatRange(0.1, 0.8),
66
+ default=0.3,
67
+ help="Target savings percentage for optimization",
68
+ )
69
+ @click.option("--all", is_flag=True, help="Use all available AWS profiles for multi-account VPC analysis")
70
+ @click.option(
71
+ "--config",
72
+ type=click.Path(exists=True),
73
+ help="Path to YAML campaign configuration file (config-driven analysis)",
74
+ )
75
+ @click.pass_context
76
+ def analyze(
77
+ ctx,
78
+ profile,
79
+ region,
80
+ dry_run,
81
+ output_format,
82
+ output_file,
83
+ cost_optimization,
84
+ topology_analysis,
85
+ security_assessment,
86
+ savings_target,
87
+ all,
88
+ config,
89
+ ):
90
+ """
91
+ Comprehensive VPC analysis with cost optimization and security assessment with universal profile support.
92
+
93
+ Enterprise Analysis Features:
94
+ • Network cost analysis with optimization recommendations
95
+ • Security group and NACL configuration review
96
+ • NAT Gateway and VPC endpoint optimization
97
+ • Multi-account network topology mapping
98
+ • Cross-account VPC analysis with --all flag
99
+ • Config-driven campaign analysis with --config (NEW)
100
+
101
+ Examples:
102
+ runbooks vpc analyze --cost-optimization --savings-target 0.25
103
+ runbooks vpc analyze --topology-analysis --security-assessment
104
+ runbooks vpc analyze --export-format pdf --cost-optimization
105
+ runbooks vpc analyze --all --cost-optimization # Multi-account analysis
106
+ runbooks vpc analyze --config campaign.yaml --profile billing-profile # Config-driven campaign
107
+ """
108
+ try:
109
+ from runbooks.common.profile_utils import get_profile_for_operation
110
+ from runbooks.common.rich_utils import handle_output_format
111
+
112
+ # Use ProfileManager for dynamic profile resolution
113
+ resolved_profile = get_profile_for_operation("operational", profile)
114
+
115
+ # NEW: Config-driven campaign analysis
116
+ if config:
117
+ from runbooks.vpc import VPCCleanupFramework
118
+ from runbooks.vpc.cleanup_wrapper import display_config_campaign_results
119
+
120
+ cleanup_framework = VPCCleanupFramework(profile=resolved_profile, region=region, safety_mode=True)
121
+
122
+ results = cleanup_framework.analyze_from_config(config)
123
+ display_config_campaign_results(results)
124
+
125
+ # Export if requested
126
+ if output_file:
127
+ handle_output_format(
128
+ data=results,
129
+ output_format=output_format,
130
+ output_file=output_file,
131
+ title=f"Campaign {results.get('campaign_metadata', {}).get('campaign_id', 'Unknown')} Results",
132
+ )
133
+
134
+ return results
135
+
136
+ # EXISTING: Standard VPC analysis (unchanged)
137
+ from runbooks.vpc.analyzer import VPCAnalyzer
138
+
139
+ analyzer = VPCAnalyzer(
140
+ profile=resolved_profile,
141
+ region=region,
142
+ cost_optimization=cost_optimization,
143
+ topology_analysis=topology_analysis,
144
+ security_assessment=security_assessment,
145
+ savings_target=savings_target,
146
+ )
147
+
148
+ analysis_results = analyzer.run_comprehensive_analysis()
149
+
150
+ # Use unified format handling
151
+ handle_output_format(
152
+ data=analysis_results,
153
+ output_format=output_format,
154
+ output_file=output_file,
155
+ title="VPC Analysis Results",
156
+ )
157
+
158
+ return analysis_results
159
+
160
+ except ImportError as e:
161
+ console.print(f"[red]❌ VPC analyzer module not available: {e}[/red]")
162
+ raise click.ClickException("VPC analysis functionality not available")
163
+ except Exception as e:
164
+ console.print(f"[red]❌ VPC analysis failed: {e}[/red]")
165
+ raise click.ClickException(str(e))
166
+
167
+ @vpc.command("nat-gateway")
168
+ @common_aws_options
169
+ @common_output_options
170
+ @click.option("--analyze", is_flag=True, help="Analyze NAT Gateway usage and costs")
171
+ @click.option("--optimize", is_flag=True, help="Generate optimization recommendations")
172
+ @click.option("--savings-target", type=click.FloatRange(0.1, 0.8), default=0.3, help="Target savings percentage")
173
+ @click.option("--include-alternatives", is_flag=True, help="Include NAT instance alternatives")
174
+ @click.option("--all", is_flag=True, help="Use all available AWS profiles for multi-account NAT Gateway analysis")
175
+ @click.pass_context
176
+ def nat_gateway_operations(
177
+ ctx,
178
+ profile,
179
+ region,
180
+ dry_run,
181
+ output_format,
182
+ output_file,
183
+ analyze,
184
+ optimize,
185
+ savings_target,
186
+ include_alternatives,
187
+ all,
188
+ ):
189
+ """
190
+ NAT Gateway cost analysis and optimization recommendations with universal profile support.
191
+
192
+ NAT Gateway Optimization Features:
193
+ • Usage pattern analysis and rightsizing recommendations
194
+ • Cost comparison with NAT instances and VPC endpoints
195
+ • Multi-AZ deployment optimization
196
+ • Business impact assessment and implementation timeline
197
+ • Multi-account NAT Gateway optimization with --all flag
198
+
199
+ Examples:
200
+ runbooks vpc nat-gateway --analyze --savings-target 0.4
201
+ runbooks vpc nat-gateway --optimize --include-alternatives
202
+ runbooks vpc nat-gateway --analyze --export-format pdf
203
+ runbooks vpc nat-gateway --all --analyze # Multi-account analysis
204
+ """
205
+ try:
206
+ from runbooks.vpc.nat_gateway_optimizer import NATGatewayOptimizer
207
+ from runbooks.common.profile_utils import get_profile_for_operation
208
+ from runbooks.common.rich_utils import handle_output_format
209
+
210
+ # Use ProfileManager for dynamic profile resolution
211
+ resolved_profile = get_profile_for_operation("operational", profile)
212
+
213
+ optimizer = NATGatewayOptimizer(
214
+ profile=resolved_profile,
215
+ region=region,
216
+ analyze=analyze,
217
+ optimize=optimize,
218
+ savings_target=savings_target,
219
+ include_alternatives=include_alternatives,
220
+ )
221
+
222
+ optimization_results = optimizer.run_nat_gateway_optimization()
223
+
224
+ # Use unified format handling
225
+ handle_output_format(
226
+ data=optimization_results,
227
+ output_format=output_format,
228
+ output_file=output_file,
229
+ title="NAT Gateway Optimization Results",
230
+ )
231
+
232
+ return optimization_results
233
+
234
+ except ImportError as e:
235
+ console.print(f"[red]❌ NAT Gateway optimizer module not available: {e}[/red]")
236
+ raise click.ClickException("NAT Gateway optimization functionality not available")
237
+ except Exception as e:
238
+ console.print(f"[red]❌ NAT Gateway optimization failed: {e}[/red]")
239
+ raise click.ClickException(str(e))
240
+
241
+ @vpc.command()
242
+ @common_aws_options
243
+ @common_output_options
244
+ @click.option("--include-costs", is_flag=True, help="Include cost analysis in topology")
245
+ @click.option(
246
+ "--detail-level",
247
+ type=click.Choice(["basic", "detailed", "comprehensive"]),
248
+ default="detailed",
249
+ help="Topology detail level",
250
+ )
251
+ @click.option("--output-dir", default="./vpc_topology", help="Output directory")
252
+ @click.option("--all", is_flag=True, help="Use all available AWS profiles for multi-account topology generation")
253
+ @click.pass_context
254
+ def topology(
255
+ ctx, profile, region, dry_run, output_format, output_file, include_costs, detail_level, output_dir, all
256
+ ):
257
+ """
258
+ Generate network topology diagrams with cost correlation and universal profile support.
259
+
260
+ Topology Analysis Features:
261
+ • Visual network topology with cost overlay
262
+ • Security group and routing visualization
263
+ • Multi-account network relationships
264
+ • Cost flow analysis and optimization opportunities
265
+ • Cross-account topology generation with --all flag
266
+
267
+ Examples:
268
+ runbooks vpc topology --include-costs --export-format pdf
269
+ runbooks vpc topology --detail-level comprehensive
270
+ runbooks vpc topology --all --include-costs # Multi-account topology
271
+ """
272
+ try:
273
+ from runbooks.vpc.topology_generator import NetworkTopologyGenerator
274
+ from runbooks.common.profile_utils import get_profile_for_operation
275
+ from runbooks.common.rich_utils import handle_output_format
276
+
277
+ # Use ProfileManager for dynamic profile resolution
278
+ resolved_profile = get_profile_for_operation("operational", profile)
279
+
280
+ topology_generator = NetworkTopologyGenerator(
281
+ profile=resolved_profile,
282
+ region=region,
283
+ include_costs=include_costs,
284
+ detail_level=detail_level,
285
+ output_dir=output_dir,
286
+ )
287
+
288
+ topology_results = topology_generator.generate_network_topology()
289
+
290
+ # Use unified format handling
291
+ handle_output_format(
292
+ data=topology_results,
293
+ output_format=output_format,
294
+ output_file=output_file,
295
+ title="Network Topology Analysis",
296
+ )
297
+
298
+ console.print(f"[green]✅ Network topology generated successfully[/green]")
299
+ console.print(f"[dim]Output directory: {output_dir}[/dim]")
300
+
301
+ return topology_results
302
+
303
+ except ImportError as e:
304
+ console.print(f"[red]❌ VPC topology module not available: {e}[/red]")
305
+ raise click.ClickException("VPC topology functionality not available")
306
+ except Exception as e:
307
+ console.print(f"[red]❌ VPC topology generation failed: {e}[/red]")
308
+ raise click.ClickException(str(e))
309
+
310
+ return vpc
@@ -0,0 +1,107 @@
1
+ """
2
+ DRY Command Registry - Single Source of Truth for CLI Commands
3
+
4
+ This registry implements the DRY principle by providing a centralized command
5
+ registration system with lazy loading for optimal performance.
6
+
7
+ FAANG Principles:
8
+ - KISS: Simple registration interface
9
+ - DRY: No duplicated command logic
10
+ - Performance: Lazy loading reduces context overhead
11
+ - Maintainability: Modular command organization
12
+ """
13
+
14
+ from typing import Dict, Any
15
+ import click
16
+
17
+
18
+ class DRYCommandRegistry:
19
+ """
20
+ Central registry for all CLI commands implementing DRY principles.
21
+
22
+ Features:
23
+ - Lazy loading: Commands loaded only when needed
24
+ - Single source of truth: No duplicated command definitions
25
+ - Performance optimized: Minimal initial context loading
26
+ - Enterprise ready: Supports all existing 160+ commands
27
+ """
28
+
29
+ _commands: Dict[str, Any] = {}
30
+ _loaded: bool = False
31
+
32
+ @classmethod
33
+ def register_commands(cls) -> Dict[str, Any]:
34
+ """
35
+ Register all CLI commands with lazy loading for performance.
36
+
37
+ Returns:
38
+ Dict mapping command names to Click command objects
39
+
40
+ Performance:
41
+ - Initial load: <100ms (no command imports)
42
+ - Full load: <500ms (when commands needed)
43
+ - Context reduction: ~25-30k tokens from main.py modularization
44
+ """
45
+ if cls._loaded:
46
+ return cls._commands
47
+
48
+ # Lazy import pattern - load modules only when registry is accessed
49
+ try:
50
+ from .commands import inventory, operate, finops, security, cfat, vpc, validation
51
+
52
+ # Core production commands
53
+ cls._commands.update(
54
+ {
55
+ "inventory": inventory.create_inventory_group(),
56
+ "operate": operate.create_operate_group(),
57
+ "finops": finops.create_finops_group(),
58
+ "security": security.create_security_group(),
59
+ "cfat": cfat.create_cfat_group(),
60
+ "vpc": vpc.create_vpc_group(),
61
+ "validation": validation.create_validation_group(),
62
+ }
63
+ )
64
+
65
+ # Optional TDD framework - load separately to avoid breaking core CLI
66
+ try:
67
+ from runbooks.tdd.cli import tdd_group
68
+
69
+ cls._commands["tdd"] = tdd_group
70
+ except ImportError:
71
+ # TDD framework not available - continue with core commands
72
+ pass
73
+
74
+ cls._loaded = True
75
+
76
+ except ImportError as e:
77
+ # Graceful degradation - return empty dict if modules not ready
78
+ click.echo(f"Warning: Command modules not fully implemented yet: {e}")
79
+ return {}
80
+
81
+ return cls._commands
82
+
83
+ @classmethod
84
+ def get_command(cls, name: str) -> Any:
85
+ """
86
+ Get a specific command by name with lazy loading.
87
+
88
+ Args:
89
+ name: Command name (e.g., 'inventory', 'operate')
90
+
91
+ Returns:
92
+ Click command object or None if not found
93
+ """
94
+ commands = cls.register_commands()
95
+ return commands.get(name)
96
+
97
+ @classmethod
98
+ def list_commands(cls) -> list:
99
+ """List all available command names."""
100
+ commands = cls.register_commands()
101
+ return list(commands.keys())
102
+
103
+ @classmethod
104
+ def reset(cls):
105
+ """Reset registry for testing purposes."""
106
+ cls._commands.clear()
107
+ cls._loaded = False
@@ -19,7 +19,7 @@ NEW: Business Interface Layer for Notebook Usage
19
19
 
20
20
  # Core async API classes (for advanced users)
21
21
  from .cost_optimizer import CostOptimizer
22
- from .security_enforcer import SecurityEnforcer
22
+ from .security_enforcer import SecurityEnforcer
23
23
  from .lifecycle_manager import ResourceLifecycleManager
24
24
  from .infrastructure_optimizer import InfrastructureOptimizer
25
25
  from .monitoring_automation import MonitoringAutomation
@@ -31,16 +31,11 @@ from .interfaces import (
31
31
  optimize_unused_resources,
32
32
  governance_campaign,
33
33
  security_incident_response,
34
- optimize_infrastructure
34
+ optimize_infrastructure,
35
35
  )
36
36
 
37
- # Enterprise Notebook Framework (NEW in v0.9.1)
38
- from .notebook_framework import (
39
- NotebookFramework,
40
- NotebookMode,
41
- AuthenticationStatus,
42
- ScenarioMetadata
43
- )
37
+ # Enterprise Notebook Framework (NEW in latest version)
38
+ from .notebook_framework import NotebookFramework, NotebookMode, AuthenticationStatus, ScenarioMetadata
44
39
 
45
40
  # Type-safe models
46
41
  from .models import (
@@ -48,7 +43,7 @@ from .models import (
48
43
  CostOptimizationResult,
49
44
  SecurityEnforcementResult,
50
45
  BusinessScenario,
51
- ResourceImpact
46
+ ResourceImpact,
52
47
  )
53
48
 
54
49
  # Import centralized version from main runbooks package
@@ -61,65 +56,63 @@ __all__ = [
61
56
  "BusinessResultSummary",
62
57
  "emergency_cost_response",
63
58
  "optimize_unused_resources",
64
- "governance_campaign",
59
+ "governance_campaign",
65
60
  "security_incident_response",
66
61
  "optimize_infrastructure",
67
-
68
- # ENTERPRISE NOTEBOOK FRAMEWORK (v0.9.1)
62
+ # ENTERPRISE NOTEBOOK FRAMEWORK (latest version)
69
63
  "NotebookFramework",
70
- "NotebookMode",
64
+ "NotebookMode",
71
65
  "AuthenticationStatus",
72
66
  "ScenarioMetadata",
73
-
74
67
  # ADVANCED: Core API Classes (async operations)
75
- "CostOptimizer",
68
+ "CostOptimizer",
76
69
  "SecurityEnforcer",
77
- "ResourceLifecycleManager",
70
+ "ResourceLifecycleManager",
78
71
  "InfrastructureOptimizer",
79
72
  "MonitoringAutomation",
80
-
81
73
  # Type-Safe Models
82
74
  "CloudOpsExecutionResult",
83
- "CostOptimizationResult",
75
+ "CostOptimizationResult",
84
76
  "SecurityEnforcementResult",
85
77
  "BusinessScenario",
86
- "ResourceImpact"
78
+ "ResourceImpact",
87
79
  ]
88
80
 
89
81
  # Enterprise Usage Examples - Business Interface Layer
90
82
  BUSINESS_SCENARIO_EXAMPLES = {
91
83
  "notebook_consolidation": {
92
- "description": "Enterprise notebook framework for consolidated scenarios (NEW in v0.9.1)",
84
+ "description": "Enterprise notebook framework for consolidated scenarios (NEW in latest version)",
93
85
  "simple_example": "from runbooks.cloudops import NotebookFramework, NotebookMode; framework = NotebookFramework(profile='default', mode=NotebookMode.EXECUTIVE)",
94
- "advanced_example": "See notebooks/cloudops/consolidated-cost-optimization.ipynb for comprehensive example"
86
+ "advanced_example": "See notebooks/cloudops/consolidated-cost-optimization.ipynb for comprehensive example",
95
87
  },
96
88
  "cost_emergency": {
97
89
  "description": "Emergency cost optimization for $10K+ monthly spikes",
98
90
  "simple_example": "from runbooks.cloudops import emergency_cost_response; result = emergency_cost_response(profile='billing', cost_spike_threshold=25000)",
99
- "advanced_example": "from runbooks.cloudops import CostOptimizer; optimizer = CostOptimizer(); optimizer.optimize_nat_gateways()"
91
+ "advanced_example": "from runbooks.cloudops import CostOptimizer; optimizer = CostOptimizer(); optimizer.optimize_nat_gateways()",
100
92
  },
101
93
  "unused_resources": {
102
94
  "description": "Find unused AWS resources for immediate cost savings",
103
95
  "simple_example": "from runbooks.cloudops import optimize_unused_resources; result = optimize_unused_resources(profile='operations', minimum_cost_threshold=50)",
104
- "advanced_example": "from runbooks.cloudops import CostOptimizer; optimizer = CostOptimizer(); optimizer.optimize_idle_ec2_instances()"
96
+ "advanced_example": "from runbooks.cloudops import CostOptimizer; optimizer = CostOptimizer(); optimizer.optimize_idle_ec2_instances()",
105
97
  },
106
98
  "security_incident": {
107
- "description": "Automated security compliance remediation",
99
+ "description": "Automated security compliance remediation",
108
100
  "simple_example": "from runbooks.cloudops import security_incident_response; result = security_incident_response(profile='security', incident_type='s3_encryption')",
109
- "advanced_example": "from runbooks.cloudops import SecurityEnforcer; enforcer = SecurityEnforcer(); enforcer.enforce_s3_encryption()"
101
+ "advanced_example": "from runbooks.cloudops import SecurityEnforcer; enforcer = SecurityEnforcer(); enforcer.enforce_s3_encryption()",
110
102
  },
111
103
  "governance_campaign": {
112
104
  "description": "Multi-account governance and cleanup operations",
113
105
  "simple_example": "from runbooks.cloudops import governance_campaign; result = governance_campaign(management_profile='org-management', scope='organization')",
114
- "advanced_example": "from runbooks.cloudops import ResourceLifecycleManager; manager = ResourceLifecycleManager(); manager.enforce_tagging_standards()"
106
+ "advanced_example": "from runbooks.cloudops import ResourceLifecycleManager; manager = ResourceLifecycleManager(); manager.enforce_tagging_standards()",
115
107
  },
116
108
  "infrastructure_optimization": {
117
109
  "description": "Infrastructure optimization and performance recovery",
118
110
  "simple_example": "from runbooks.cloudops import optimize_infrastructure; result = optimize_infrastructure(profile='operations', cost_reduction_target=25)",
119
- "advanced_example": "from runbooks.cloudops import InfrastructureOptimizer; optimizer = InfrastructureOptimizer(); optimizer.optimize_load_balancers()"
120
- }
111
+ "advanced_example": "from runbooks.cloudops import InfrastructureOptimizer; optimizer = InfrastructureOptimizer(); optimizer.optimize_load_balancers()",
112
+ },
121
113
  }
122
114
 
115
+
123
116
  def get_business_scenarios():
124
117
  """Get available business scenarios with examples."""
125
- return BUSINESS_SCENARIO_EXAMPLES
118
+ return BUSINESS_SCENARIO_EXAMPLES