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/main_final.py CHANGED
@@ -4,7 +4,7 @@ CloudOps Runbooks - PERFORMANCE OPTIMIZED Enterprise CLI Interface
4
4
  ## Performance Optimizations Applied:
5
5
 
6
6
  1. **Import Chain Fix**: Direct version import avoids heavy finops chain
7
- 2. **Lazy Loading**: Heavy components loaded only when needed
7
+ 2. **Lazy Loading**: Heavy components loaded only when needed
8
8
  3. **Fast Operations**: --help, --version run in <0.5s
9
9
  4. **Progressive Disclosure**: Basic CLI → Enterprise features on demand
10
10
 
@@ -29,50 +29,67 @@ __version__ = "1.0.0" # Avoid 'from runbooks import __version__'
29
29
  # Fast Rich console loading
30
30
  try:
31
31
  from rich.console import Console
32
+
32
33
  _HAS_RICH = True
33
34
  except ImportError:
34
35
  _HAS_RICH = False
36
+
35
37
  class Console:
36
38
  def print(self, *args, **kwargs):
37
39
  print(*args)
38
40
 
41
+
39
42
  console = Console()
40
43
 
44
+
41
45
  # Lazy loading functions for heavy components
42
46
  def lazy_load_finops():
43
47
  """Lazy load FinOps components only when needed."""
44
48
  from runbooks.finops.dashboard_runner import run_dashboard
45
49
  from runbooks.finops import get_cost_data, get_trend
50
+
46
51
  return run_dashboard, get_cost_data, get_trend
47
52
 
53
+
48
54
  def lazy_load_inventory():
49
55
  """Lazy load inventory components only when needed."""
50
56
  from runbooks.inventory.core.collector import InventoryCollector
57
+
51
58
  return InventoryCollector
52
59
 
60
+
53
61
  def lazy_load_security():
54
62
  """Lazy load security components only when needed."""
55
63
  from runbooks.security.security_baseline_tester import SecurityBaselineTester
64
+
56
65
  return SecurityBaselineTester
57
66
 
67
+
58
68
  def lazy_load_cfat():
59
69
  """Lazy load CFAT components only when needed."""
60
70
  from runbooks.cfat.runner import AssessmentRunner
71
+
61
72
  return AssessmentRunner
62
73
 
74
+
63
75
  def lazy_load_profile_utils():
64
76
  """Lazy load profile utilities only when needed."""
65
77
  from runbooks.common.profile_utils import get_profile_for_operation
78
+
66
79
  return get_profile_for_operation
67
80
 
81
+
68
82
  def lazy_load_aws_session():
69
83
  """Lazy load AWS session creation."""
70
84
  import boto3
85
+
71
86
  return boto3.Session()
72
87
 
88
+
73
89
  # Performance monitoring
74
90
  def track_performance(operation_name: str):
75
91
  """Decorator to track operation performance."""
92
+
76
93
  def decorator(func):
77
94
  def wrapper(*args, **kwargs):
78
95
  start_time = datetime.now()
@@ -86,35 +103,41 @@ def track_performance(operation_name: str):
86
103
  duration = (datetime.now() - start_time).total_seconds()
87
104
  console.print(f"❌ {operation_name} failed after {duration:.3f}s: {e}")
88
105
  raise
106
+
89
107
  return wrapper
108
+
90
109
  return decorator
91
110
 
111
+
92
112
  # ============================================================================
93
113
  # CLI MAIN ENTRY POINT - OPTIMIZED
94
114
  # ============================================================================
95
115
 
116
+
96
117
  @click.group()
97
118
  @click.version_option(version=__version__, prog_name="runbooks")
98
- @click.option('--debug', is_flag=True, help='Enable debug logging')
99
- @click.option('--profile', help='AWS profile to use')
119
+ @click.option("--debug", is_flag=True, help="Enable debug logging")
120
+ @click.option("--profile", help="AWS profile to use")
100
121
  @click.pass_context
101
122
  def cli(ctx: click.Context, debug: bool, profile: str):
102
123
  """
103
124
  CloudOps Runbooks - Enterprise AWS Automation Platform
104
-
125
+
105
126
  Performance optimized: <0.5s for basic operations.
106
127
  """
107
128
  ctx.ensure_object(dict)
108
- ctx.obj['profile'] = profile
109
- ctx.obj['debug'] = debug
110
-
129
+ ctx.obj["profile"] = profile
130
+ ctx.obj["debug"] = debug
131
+
111
132
  if debug:
112
133
  logger.enable("runbooks")
113
134
 
135
+
114
136
  # ============================================================================
115
137
  # FAST BASIC COMMANDS
116
138
  # ============================================================================
117
139
 
140
+
118
141
  @cli.command("version-info")
119
142
  @track_performance("version")
120
143
  def version_info():
@@ -122,6 +145,7 @@ def version_info():
122
145
  console.print(f"[bold blue]CloudOps Runbooks[/bold blue] v{__version__}")
123
146
  console.print("Enterprise AWS Automation Platform")
124
147
 
148
+
125
149
  @cli.command()
126
150
  @track_performance("status")
127
151
  def status():
@@ -130,16 +154,17 @@ def status():
130
154
  console.print(f"Version: [green]{__version__}[/green]")
131
155
  console.print("Status: [green]Ready[/green]")
132
156
 
157
+
133
158
  @cli.command()
134
159
  @track_performance("perf")
135
160
  def perf():
136
161
  """Performance diagnostics and benchmarking."""
137
162
  start_time = datetime.now()
138
163
  console.print("🚀 [bold]Performance Diagnostics[/bold]")
139
-
164
+
140
165
  # Test component loading times
141
166
  console.print("\n📊 Component Loading Performance:")
142
-
167
+
143
168
  # Test FinOps loading
144
169
  try:
145
170
  load_start = datetime.now()
@@ -148,93 +173,95 @@ def perf():
148
173
  console.print(f"FinOps Module: [green]{load_time:.3f}s[/green]")
149
174
  except Exception as e:
150
175
  console.print(f"FinOps Module: [red]Error - {e}[/red]")
151
-
176
+
152
177
  # Test AWS session
153
178
  try:
154
- aws_start = datetime.now()
179
+ aws_start = datetime.now()
155
180
  lazy_load_aws_session()
156
181
  aws_time = (datetime.now() - aws_start).total_seconds()
157
182
  console.print(f"AWS Session: [green]{aws_time:.3f}s[/green]")
158
183
  except Exception as e:
159
184
  console.print(f"AWS Session: [yellow]No credentials - {e}[/yellow]")
160
-
185
+
161
186
  total_time = (datetime.now() - start_time).total_seconds()
162
187
  console.print(f"\n⏱️ [bold]Total Diagnostic Time: {total_time:.3f}s[/bold]")
163
188
 
189
+
164
190
  # ============================================================================
165
191
  # FINOPS COMMANDS - LAZY LOADED
166
192
  # ============================================================================
167
193
 
194
+
168
195
  @cli.group()
169
196
  def finops():
170
197
  """Financial Operations and Cost Analysis (lazy loaded)"""
171
198
  pass
172
199
 
200
+
173
201
  @finops.command()
174
- @click.option('--profile', help='AWS profile to use')
175
- @click.option('--export', type=click.Choice(['csv', 'json', 'html', 'pdf']), help='Export format')
176
- @click.option('--output-file', type=click.Path(), help='Output file path')
202
+ @click.option("--profile", help="AWS profile to use")
203
+ @click.option("--export", type=click.Choice(["csv", "json", "html", "pdf"]), help="Export format")
204
+ @click.option("--output-file", type=click.Path(), help="Output file path")
177
205
  @track_performance("finops_dashboard")
178
206
  def dashboard(profile: str, export: str, output_file: str):
179
207
  """Run FinOps cost analysis dashboard."""
180
208
  console.print("🚀 Loading FinOps Dashboard...")
181
-
209
+
182
210
  # Lazy load components
183
211
  run_dashboard, get_cost_data, get_trend = lazy_load_finops()
184
212
  get_profile_for_operation = lazy_load_profile_utils()
185
-
213
+
186
214
  try:
187
215
  # Resolve profile
188
216
  resolved_profile = get_profile_for_operation("billing", profile)
189
217
  console.print(f"Using profile: [blue]{resolved_profile}[/blue]")
190
-
218
+
191
219
  # Run dashboard
192
- result = run_dashboard(
193
- profile=resolved_profile,
194
- export_format=export,
195
- output_file=output_file
196
- )
220
+ result = run_dashboard(profile=resolved_profile, export_format=export, output_file=output_file)
197
221
  console.print("✅ FinOps analysis completed successfully")
198
222
  return result
199
223
  except Exception as e:
200
224
  console.print(f"❌ FinOps analysis failed: {e}")
201
225
  raise
202
226
 
227
+
203
228
  # ============================================================================
204
- # INVENTORY COMMANDS - LAZY LOADED
229
+ # INVENTORY COMMANDS - LAZY LOADED
205
230
  # ============================================================================
206
231
 
232
+
207
233
  @cli.group()
208
234
  def inventory():
209
235
  """Resource Discovery and Inventory Management (lazy loaded)"""
210
236
  pass
211
237
 
238
+
212
239
  @inventory.command()
213
- @click.option('--profile', help='AWS profile to use')
214
- @click.option('--regions', multiple=True, help='AWS regions to scan')
215
- @click.option('--services', multiple=True, help='AWS services to include')
240
+ @click.option("--profile", help="AWS profile to use")
241
+ @click.option("--regions", multiple=True, help="AWS regions to scan")
242
+ @click.option("--services", multiple=True, help="AWS services to include")
216
243
  @track_performance("inventory_collect")
217
244
  def collect(profile: str, regions: tuple, services: tuple):
218
245
  """Collect comprehensive inventory across AWS accounts."""
219
246
  console.print("🔍 Loading Inventory Collector...")
220
-
247
+
221
248
  # Lazy load components
222
249
  InventoryCollector = lazy_load_inventory()
223
250
  get_profile_for_operation = lazy_load_profile_utils()
224
251
  session = lazy_load_aws_session()
225
-
252
+
226
253
  try:
227
254
  # Resolve profile
228
255
  resolved_profile = get_profile_for_operation("management", profile)
229
256
  console.print(f"Using profile: [blue]{resolved_profile}[/blue]")
230
-
257
+
231
258
  # Create collector
232
259
  collector = InventoryCollector()
233
-
260
+
234
261
  result = collector.collect_services(
235
262
  profile=resolved_profile,
236
263
  regions=list(regions) if regions else None,
237
- services=list(services) if services else None
264
+ services=list(services) if services else None,
238
265
  )
239
266
  console.print("✅ Inventory collection completed")
240
267
  return result
@@ -242,117 +269,121 @@ def collect(profile: str, regions: tuple, services: tuple):
242
269
  console.print(f"❌ Inventory collection failed: {e}")
243
270
  raise
244
271
 
272
+
245
273
  # ============================================================================
246
274
  # SECURITY COMMANDS - LAZY LOADED
247
275
  # ============================================================================
248
276
 
277
+
249
278
  @cli.group()
250
279
  def security():
251
280
  """Security Assessment and Compliance (lazy loaded)"""
252
281
  pass
253
282
 
283
+
254
284
  @security.command()
255
- @click.option('--profile', help='AWS profile to use')
256
- @click.option('--frameworks', multiple=True, help='Compliance frameworks')
285
+ @click.option("--profile", help="AWS profile to use")
286
+ @click.option("--frameworks", multiple=True, help="Compliance frameworks")
257
287
  @track_performance("security_assess")
258
288
  def assess(profile: str, frameworks: tuple):
259
289
  """Run security baseline assessment."""
260
290
  console.print("🔒 Loading Security Assessment...")
261
-
291
+
262
292
  # Lazy load components
263
293
  SecurityBaselineTester = lazy_load_security()
264
294
  get_profile_for_operation = lazy_load_profile_utils()
265
-
295
+
266
296
  try:
267
297
  # Resolve profile
268
298
  resolved_profile = get_profile_for_operation("management", profile)
269
299
  console.print(f"Using profile: [blue]{resolved_profile}[/blue]")
270
-
300
+
271
301
  # Create tester
272
302
  tester = SecurityBaselineTester()
273
-
274
- result = tester.run_assessment(
275
- profile=resolved_profile,
276
- frameworks=list(frameworks) if frameworks else None
277
- )
303
+
304
+ result = tester.run_assessment(profile=resolved_profile, frameworks=list(frameworks) if frameworks else None)
278
305
  console.print("✅ Security assessment completed")
279
306
  return result
280
307
  except Exception as e:
281
308
  console.print(f"❌ Security assessment failed: {e}")
282
309
  raise
283
310
 
311
+
284
312
  # ============================================================================
285
313
  # CFAT COMMANDS - LAZY LOADED
286
314
  # ============================================================================
287
315
 
316
+
288
317
  @cli.group()
289
318
  def cfat():
290
319
  """Cloud Foundations Assessment Tool (lazy loaded)"""
291
320
  pass
292
321
 
322
+
293
323
  @cfat.command()
294
- @click.option('--profile', help='AWS profile to use')
295
- @click.option('--output-file', type=click.Path(), help='Report output file')
324
+ @click.option("--profile", help="AWS profile to use")
325
+ @click.option("--output-file", type=click.Path(), help="Report output file")
296
326
  @track_performance("cfat_assess")
297
327
  def assess(profile: str, output_file: str):
298
328
  """Run Cloud Foundations Assessment."""
299
329
  console.print("🏛️ Loading CFAT Assessment...")
300
-
330
+
301
331
  # Lazy load components
302
332
  AssessmentRunner = lazy_load_cfat()
303
333
  get_profile_for_operation = lazy_load_profile_utils()
304
-
334
+
305
335
  try:
306
336
  # Resolve profile
307
337
  resolved_profile = get_profile_for_operation("management", profile)
308
338
  console.print(f"Using profile: [blue]{resolved_profile}[/blue]")
309
-
339
+
310
340
  # Create runner
311
341
  runner = AssessmentRunner()
312
-
313
- result = runner.run_assessment(
314
- profile=resolved_profile,
315
- output_file=output_file
316
- )
342
+
343
+ result = runner.run_assessment(profile=resolved_profile, output_file=output_file)
317
344
  console.print("✅ CFAT assessment completed")
318
345
  return result
319
346
  except Exception as e:
320
347
  console.print(f"❌ CFAT assessment failed: {e}")
321
348
  raise
322
349
 
350
+
323
351
  # ============================================================================
324
352
  # OPERATE COMMANDS - LAZY LOADED
325
353
  # ============================================================================
326
354
 
355
+
327
356
  @cli.group()
328
357
  def operate():
329
358
  """AWS Resource Operations and Automation (lazy loaded)"""
330
359
  pass
331
360
 
361
+
332
362
  @operate.command()
333
- @click.option('--profile', help='AWS profile to use')
334
- @click.option('--dry-run', is_flag=True, default=True, help='Dry run mode')
363
+ @click.option("--profile", help="AWS profile to use")
364
+ @click.option("--dry-run", is_flag=True, default=True, help="Dry run mode")
335
365
  @track_performance("operate_list")
336
366
  def list(profile: str, dry_run: bool):
337
367
  """List AWS resources (placeholder for full operate functionality)."""
338
368
  console.print("⚡ Loading AWS Operations...")
339
-
369
+
340
370
  get_profile_for_operation = lazy_load_profile_utils()
341
371
  session = lazy_load_aws_session()
342
-
372
+
343
373
  try:
344
374
  resolved_profile = get_profile_for_operation("operational", profile)
345
375
  console.print(f"Using profile: [blue]{resolved_profile}[/blue]")
346
-
376
+
347
377
  if dry_run:
348
378
  console.print("🔒 [yellow]Running in dry-run mode[/yellow]")
349
-
379
+
350
380
  # Would load operate components here
351
381
  console.print("✅ Operations module ready")
352
-
382
+
353
383
  except Exception as e:
354
384
  console.print(f"❌ Operations failed: {e}")
355
385
  raise
356
386
 
387
+
357
388
  if __name__ == "__main__":
358
- cli()
389
+ cli()
runbooks/main_minimal.py CHANGED
@@ -14,27 +14,31 @@ from datetime import datetime
14
14
  # Minimal imports - only what's absolutely necessary
15
15
  from runbooks import __version__
16
16
 
17
+
17
18
  # Simple console fallback
18
19
  class SimpleConsole:
19
20
  def print(self, *args, **kwargs):
20
21
  print(*args)
21
22
 
23
+
22
24
  console = SimpleConsole()
23
25
 
26
+
24
27
  @click.group()
25
28
  @click.version_option(version=__version__, prog_name="runbooks")
26
- @click.option('--debug', is_flag=True, help='Enable debug logging')
27
- @click.option('--profile', help='AWS profile to use')
29
+ @click.option("--debug", is_flag=True, help="Enable debug logging")
30
+ @click.option("--profile", help="AWS profile to use")
28
31
  @click.pass_context
29
32
  def cli(ctx: click.Context, debug: bool, profile: str):
30
33
  """
31
34
  CloudOps Runbooks - Enterprise AWS Automation Platform (Minimal Version)
32
-
35
+
33
36
  Performance optimized for sub-second response times.
34
37
  """
35
38
  ctx.ensure_object(dict)
36
- ctx.obj['profile'] = profile
37
- ctx.obj['debug'] = debug
39
+ ctx.obj["profile"] = profile
40
+ ctx.obj["debug"] = debug
41
+
38
42
 
39
43
  @cli.command()
40
44
  def version():
@@ -42,6 +46,7 @@ def version():
42
46
  console.print(f"CloudOps Runbooks v{__version__}")
43
47
  console.print("Enterprise AWS Automation Platform")
44
48
 
49
+
45
50
  @cli.command()
46
51
  def status():
47
52
  """Show basic status."""
@@ -49,6 +54,7 @@ def status():
49
54
  console.print(f"Version: {__version__}")
50
55
  console.print("Status: Ready")
51
56
 
57
+
52
58
  @cli.command()
53
59
  def perf():
54
60
  """Test CLI performance baseline."""
@@ -58,27 +64,33 @@ def perf():
58
64
  duration = (end_time - start_time).total_seconds()
59
65
  console.print(f"Command execution: {duration:.3f}s")
60
66
 
67
+
61
68
  # Only include minimal commands for performance testing
62
69
  @cli.group()
63
70
  def finops():
64
71
  """Financial Operations (lazy loaded)"""
65
72
  pass
66
73
 
74
+
67
75
  @finops.command()
68
- @click.option('--profile', help='AWS profile to use')
76
+ @click.option("--profile", help="AWS profile to use")
69
77
  def dashboard(profile: str):
70
78
  """Run FinOps dashboard (will lazy load when needed)."""
71
79
  console.print("Loading FinOps dashboard...")
72
-
80
+
73
81
  # This is where we would lazy load the actual functionality
74
82
  start_time = datetime.now()
75
-
83
+
76
84
  # Simulate lazy loading
77
85
  try:
78
86
  from runbooks.finops.dashboard_runner import run_dashboard
87
+
79
88
  console.print(f"FinOps module loaded in {(datetime.now() - start_time).total_seconds():.3f}s")
80
89
  except ImportError:
81
- console.print(f"FinOps module not available (simulated lazy load: {(datetime.now() - start_time).total_seconds():.3f}s)")
90
+ console.print(
91
+ f"FinOps module not available (simulated lazy load: {(datetime.now() - start_time).total_seconds():.3f}s)"
92
+ )
93
+
82
94
 
83
95
  if __name__ == "__main__":
84
- cli()
96
+ cli()