runbooks 1.1.4__py3-none-any.whl → 1.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runbooks/__init__.py +31 -2
- runbooks/__init___optimized.py +18 -4
- runbooks/_platform/__init__.py +1 -5
- runbooks/_platform/core/runbooks_wrapper.py +141 -138
- runbooks/aws2/accuracy_validator.py +812 -0
- runbooks/base.py +7 -0
- runbooks/cfat/assessment/compliance.py +1 -1
- runbooks/cfat/assessment/runner.py +1 -0
- runbooks/cfat/cloud_foundations_assessment.py +227 -239
- runbooks/cli/__init__.py +1 -1
- runbooks/cli/commands/cfat.py +64 -23
- runbooks/cli/commands/finops.py +1005 -54
- runbooks/cli/commands/inventory.py +138 -35
- runbooks/cli/commands/operate.py +9 -36
- runbooks/cli/commands/security.py +42 -18
- runbooks/cli/commands/validation.py +432 -18
- runbooks/cli/commands/vpc.py +81 -17
- runbooks/cli/registry.py +22 -10
- runbooks/cloudops/__init__.py +20 -27
- runbooks/cloudops/base.py +96 -107
- runbooks/cloudops/cost_optimizer.py +544 -542
- runbooks/cloudops/infrastructure_optimizer.py +5 -4
- runbooks/cloudops/interfaces.py +224 -225
- runbooks/cloudops/lifecycle_manager.py +5 -4
- runbooks/cloudops/mcp_cost_validation.py +252 -235
- runbooks/cloudops/models.py +78 -53
- runbooks/cloudops/monitoring_automation.py +5 -4
- runbooks/cloudops/notebook_framework.py +177 -213
- runbooks/cloudops/security_enforcer.py +125 -159
- runbooks/common/accuracy_validator.py +11 -0
- runbooks/common/aws_pricing.py +349 -326
- runbooks/common/aws_pricing_api.py +211 -212
- runbooks/common/aws_profile_manager.py +40 -36
- runbooks/common/aws_utils.py +74 -79
- runbooks/common/business_logic.py +126 -104
- runbooks/common/cli_decorators.py +36 -60
- runbooks/common/comprehensive_cost_explorer_integration.py +455 -463
- runbooks/common/cross_account_manager.py +197 -204
- runbooks/common/date_utils.py +27 -39
- runbooks/common/decorators.py +29 -19
- runbooks/common/dry_run_examples.py +173 -208
- runbooks/common/dry_run_framework.py +157 -155
- runbooks/common/enhanced_exception_handler.py +15 -4
- runbooks/common/enhanced_logging_example.py +50 -64
- runbooks/common/enhanced_logging_integration_example.py +65 -37
- runbooks/common/env_utils.py +16 -16
- runbooks/common/error_handling.py +40 -38
- runbooks/common/lazy_loader.py +41 -23
- runbooks/common/logging_integration_helper.py +79 -86
- runbooks/common/mcp_cost_explorer_integration.py +476 -493
- runbooks/common/mcp_integration.py +63 -74
- runbooks/common/memory_optimization.py +140 -118
- runbooks/common/module_cli_base.py +37 -58
- runbooks/common/organizations_client.py +175 -193
- runbooks/common/patterns.py +23 -25
- runbooks/common/performance_monitoring.py +67 -71
- runbooks/common/performance_optimization_engine.py +283 -274
- runbooks/common/profile_utils.py +111 -37
- runbooks/common/rich_utils.py +201 -141
- runbooks/common/sre_performance_suite.py +177 -186
- runbooks/enterprise/__init__.py +1 -1
- runbooks/enterprise/logging.py +144 -106
- runbooks/enterprise/security.py +187 -204
- runbooks/enterprise/validation.py +43 -56
- runbooks/finops/__init__.py +26 -30
- runbooks/finops/account_resolver.py +1 -1
- runbooks/finops/advanced_optimization_engine.py +980 -0
- runbooks/finops/automation_core.py +268 -231
- runbooks/finops/business_case_config.py +184 -179
- runbooks/finops/cli.py +660 -139
- runbooks/finops/commvault_ec2_analysis.py +157 -164
- runbooks/finops/compute_cost_optimizer.py +336 -320
- runbooks/finops/config.py +20 -20
- runbooks/finops/cost_optimizer.py +484 -618
- runbooks/finops/cost_processor.py +332 -214
- runbooks/finops/dashboard_runner.py +1006 -172
- runbooks/finops/ebs_cost_optimizer.py +991 -657
- runbooks/finops/elastic_ip_optimizer.py +317 -257
- runbooks/finops/enhanced_mcp_integration.py +340 -0
- runbooks/finops/enhanced_progress.py +32 -29
- runbooks/finops/enhanced_trend_visualization.py +3 -2
- runbooks/finops/enterprise_wrappers.py +223 -285
- runbooks/finops/executive_export.py +203 -160
- runbooks/finops/helpers.py +130 -288
- runbooks/finops/iam_guidance.py +1 -1
- runbooks/finops/infrastructure/__init__.py +80 -0
- runbooks/finops/infrastructure/commands.py +506 -0
- runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
- runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
- runbooks/finops/markdown_exporter.py +337 -174
- runbooks/finops/mcp_validator.py +1952 -0
- runbooks/finops/nat_gateway_optimizer.py +1512 -481
- runbooks/finops/network_cost_optimizer.py +657 -587
- runbooks/finops/notebook_utils.py +226 -188
- runbooks/finops/optimization_engine.py +1136 -0
- runbooks/finops/optimizer.py +19 -23
- runbooks/finops/rds_snapshot_optimizer.py +367 -411
- runbooks/finops/reservation_optimizer.py +427 -363
- runbooks/finops/scenario_cli_integration.py +64 -65
- runbooks/finops/scenarios.py +1277 -438
- runbooks/finops/schemas.py +218 -182
- runbooks/finops/snapshot_manager.py +2289 -0
- runbooks/finops/types.py +3 -3
- runbooks/finops/validation_framework.py +259 -265
- runbooks/finops/vpc_cleanup_exporter.py +189 -144
- runbooks/finops/vpc_cleanup_optimizer.py +591 -573
- runbooks/finops/workspaces_analyzer.py +171 -182
- runbooks/integration/__init__.py +89 -0
- runbooks/integration/mcp_integration.py +1920 -0
- runbooks/inventory/CLAUDE.md +816 -0
- runbooks/inventory/__init__.py +2 -2
- runbooks/inventory/cloud_foundations_integration.py +144 -149
- runbooks/inventory/collectors/aws_comprehensive.py +1 -1
- runbooks/inventory/collectors/aws_networking.py +109 -99
- runbooks/inventory/collectors/base.py +4 -0
- runbooks/inventory/core/collector.py +495 -313
- runbooks/inventory/drift_detection_cli.py +69 -96
- runbooks/inventory/inventory_mcp_cli.py +48 -46
- runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
- runbooks/inventory/mcp_inventory_validator.py +549 -465
- runbooks/inventory/mcp_vpc_validator.py +359 -442
- runbooks/inventory/organizations_discovery.py +55 -51
- runbooks/inventory/rich_inventory_display.py +33 -32
- runbooks/inventory/unified_validation_engine.py +278 -251
- runbooks/inventory/vpc_analyzer.py +732 -695
- runbooks/inventory/vpc_architecture_validator.py +293 -348
- runbooks/inventory/vpc_dependency_analyzer.py +382 -378
- runbooks/inventory/vpc_flow_analyzer.py +1 -1
- runbooks/main.py +49 -34
- runbooks/main_final.py +91 -60
- runbooks/main_minimal.py +22 -10
- runbooks/main_optimized.py +131 -100
- runbooks/main_ultra_minimal.py +7 -2
- runbooks/mcp/__init__.py +36 -0
- runbooks/mcp/integration.py +679 -0
- runbooks/monitoring/performance_monitor.py +9 -4
- runbooks/operate/dynamodb_operations.py +3 -1
- runbooks/operate/ec2_operations.py +145 -137
- runbooks/operate/iam_operations.py +146 -152
- runbooks/operate/networking_cost_heatmap.py +29 -8
- runbooks/operate/rds_operations.py +223 -254
- runbooks/operate/s3_operations.py +107 -118
- runbooks/operate/vpc_operations.py +646 -616
- runbooks/remediation/base.py +1 -1
- runbooks/remediation/commons.py +10 -7
- runbooks/remediation/commvault_ec2_analysis.py +70 -66
- runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
- runbooks/remediation/multi_account.py +24 -21
- runbooks/remediation/rds_snapshot_list.py +86 -60
- runbooks/remediation/remediation_cli.py +92 -146
- runbooks/remediation/universal_account_discovery.py +83 -79
- runbooks/remediation/workspaces_list.py +46 -41
- runbooks/security/__init__.py +19 -0
- runbooks/security/assessment_runner.py +1150 -0
- runbooks/security/baseline_checker.py +812 -0
- runbooks/security/cloudops_automation_security_validator.py +509 -535
- runbooks/security/compliance_automation_engine.py +17 -17
- runbooks/security/config/__init__.py +2 -2
- runbooks/security/config/compliance_config.py +50 -50
- runbooks/security/config_template_generator.py +63 -76
- runbooks/security/enterprise_security_framework.py +1 -1
- runbooks/security/executive_security_dashboard.py +519 -508
- runbooks/security/multi_account_security_controls.py +959 -1210
- runbooks/security/real_time_security_monitor.py +422 -444
- runbooks/security/security_baseline_tester.py +1 -1
- runbooks/security/security_cli.py +143 -112
- runbooks/security/test_2way_validation.py +439 -0
- runbooks/security/two_way_validation_framework.py +852 -0
- runbooks/sre/production_monitoring_framework.py +167 -177
- runbooks/tdd/__init__.py +15 -0
- runbooks/tdd/cli.py +1071 -0
- runbooks/utils/__init__.py +14 -17
- runbooks/utils/logger.py +7 -2
- runbooks/utils/version_validator.py +50 -47
- runbooks/validation/__init__.py +6 -6
- runbooks/validation/cli.py +9 -3
- runbooks/validation/comprehensive_2way_validator.py +745 -704
- runbooks/validation/mcp_validator.py +906 -228
- runbooks/validation/terraform_citations_validator.py +104 -115
- runbooks/validation/terraform_drift_detector.py +447 -451
- runbooks/vpc/README.md +617 -0
- runbooks/vpc/__init__.py +8 -1
- runbooks/vpc/analyzer.py +577 -0
- runbooks/vpc/cleanup_wrapper.py +476 -413
- runbooks/vpc/cli_cloudtrail_commands.py +339 -0
- runbooks/vpc/cli_mcp_validation_commands.py +480 -0
- runbooks/vpc/cloudtrail_audit_integration.py +717 -0
- runbooks/vpc/config.py +92 -97
- runbooks/vpc/cost_engine.py +411 -148
- runbooks/vpc/cost_explorer_integration.py +553 -0
- runbooks/vpc/cross_account_session.py +101 -106
- runbooks/vpc/enhanced_mcp_validation.py +917 -0
- runbooks/vpc/eni_gate_validator.py +961 -0
- runbooks/vpc/heatmap_engine.py +185 -160
- runbooks/vpc/mcp_no_eni_validator.py +680 -639
- runbooks/vpc/nat_gateway_optimizer.py +358 -0
- runbooks/vpc/networking_wrapper.py +15 -8
- runbooks/vpc/pdca_remediation_planner.py +528 -0
- runbooks/vpc/performance_optimized_analyzer.py +219 -231
- runbooks/vpc/runbooks_adapter.py +1167 -241
- runbooks/vpc/tdd_red_phase_stubs.py +601 -0
- runbooks/vpc/test_data_loader.py +358 -0
- runbooks/vpc/tests/conftest.py +314 -4
- runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
- runbooks/vpc/tests/test_cost_engine.py +0 -2
- runbooks/vpc/topology_generator.py +326 -0
- runbooks/vpc/unified_scenarios.py +1297 -1124
- runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
- runbooks-1.1.5.dist-info/METADATA +328 -0
- {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/RECORD +214 -193
- runbooks/finops/README.md +0 -414
- runbooks/finops/accuracy_cross_validator.py +0 -647
- runbooks/finops/business_cases.py +0 -950
- runbooks/finops/dashboard_router.py +0 -922
- runbooks/finops/ebs_optimizer.py +0 -973
- runbooks/finops/embedded_mcp_validator.py +0 -1629
- runbooks/finops/enhanced_dashboard_runner.py +0 -527
- runbooks/finops/finops_dashboard.py +0 -584
- runbooks/finops/finops_scenarios.py +0 -1218
- runbooks/finops/legacy_migration.py +0 -730
- runbooks/finops/multi_dashboard.py +0 -1519
- runbooks/finops/single_dashboard.py +0 -1113
- runbooks/finops/unlimited_scenarios.py +0 -393
- runbooks-1.1.4.dist-info/METADATA +0 -800
- {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
- {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
- {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
- {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
@@ -21,12 +21,18 @@ from rich.panel import Panel
|
|
21
21
|
from rich.table import Table
|
22
22
|
|
23
23
|
from runbooks.common.rich_utils import (
|
24
|
-
console,
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
console,
|
25
|
+
print_header,
|
26
|
+
print_success,
|
27
|
+
print_error,
|
28
|
+
print_warning,
|
29
|
+
print_info,
|
30
|
+
create_table,
|
31
|
+
create_progress_bar,
|
32
|
+
format_cost,
|
33
|
+
STATUS_INDICATORS,
|
29
34
|
)
|
35
|
+
from runbooks.common.cli_decorators import common_aws_options, rich_output_options, enterprise_safety_options
|
30
36
|
from runbooks.common.error_handling import handle_aws_errors, handle_validation_errors
|
31
37
|
from runbooks.common.profile_utils import get_profile_for_operation, validate_profile_access_decorator
|
32
38
|
from runbooks.common.business_logic import BusinessMetrics, OptimizationResult, UniversalBusinessLogic
|
@@ -35,6 +41,7 @@ from runbooks.common.business_logic import BusinessMetrics, OptimizationResult,
|
|
35
41
|
@dataclass
|
36
42
|
class ModuleConfig:
|
37
43
|
"""Configuration for runbooks module CLI."""
|
44
|
+
|
38
45
|
name: str
|
39
46
|
version: str
|
40
47
|
description: str
|
@@ -69,11 +76,7 @@ class ModuleCLIBase(abc.ABC):
|
|
69
76
|
"""Print standardized module header with Rich formatting."""
|
70
77
|
print_header(self.config.name, self.config.version)
|
71
78
|
self.console.print(
|
72
|
-
Panel(
|
73
|
-
f"[cyan]{self.config.description}[/cyan]",
|
74
|
-
title=f"🚀 {self.config.name} Module",
|
75
|
-
border_style="blue"
|
76
|
-
)
|
79
|
+
Panel(f"[cyan]{self.config.description}[/cyan]", title=f"🚀 {self.config.name} Module", border_style="blue")
|
77
80
|
)
|
78
81
|
|
79
82
|
def validate_prerequisites(self, profile: Optional[str] = None) -> bool:
|
@@ -88,15 +91,12 @@ class ModuleCLIBase(abc.ABC):
|
|
88
91
|
"""
|
89
92
|
try:
|
90
93
|
# Validate AWS profile access
|
91
|
-
selected_profile = get_profile_for_operation(
|
92
|
-
self.config.primary_operation_type,
|
93
|
-
profile
|
94
|
-
)
|
94
|
+
selected_profile = get_profile_for_operation(self.config.primary_operation_type, profile)
|
95
95
|
|
96
96
|
if not validate_profile_access(selected_profile, self.config.name):
|
97
97
|
return False
|
98
98
|
|
99
|
-
self._session_data[
|
99
|
+
self._session_data["validated_profile"] = selected_profile
|
100
100
|
return True
|
101
101
|
|
102
102
|
except Exception as e:
|
@@ -125,8 +125,7 @@ class ModuleCLIBase(abc.ABC):
|
|
125
125
|
"""
|
126
126
|
pass
|
127
127
|
|
128
|
-
def create_results_table(self, title: str, data: List[Dict[str, Any]],
|
129
|
-
columns: List[str]) -> Table:
|
128
|
+
def create_results_table(self, title: str, data: List[Dict[str, Any]], columns: List[str]) -> Table:
|
130
129
|
"""
|
131
130
|
Create standardized results table with Rich formatting.
|
132
131
|
|
@@ -138,18 +137,19 @@ class ModuleCLIBase(abc.ABC):
|
|
138
137
|
Returns:
|
139
138
|
Configured Rich Table object
|
140
139
|
"""
|
141
|
-
table = create_table(
|
142
|
-
|
143
|
-
for col in columns
|
144
|
-
|
140
|
+
table = create_table(
|
141
|
+
title=title,
|
142
|
+
columns=[{"name": col, "style": "cyan" if "name" in col.lower() else "default"} for col in columns],
|
143
|
+
)
|
145
144
|
|
146
145
|
for row in data:
|
147
146
|
table.add_row(*[str(row.get(col, "N/A")) for col in columns])
|
148
147
|
|
149
148
|
return table
|
150
149
|
|
151
|
-
def export_results(
|
152
|
-
|
150
|
+
def export_results(
|
151
|
+
self, results: Dict[str, Any], format_type: str = "json", output_path: Optional[str] = None
|
152
|
+
) -> bool:
|
153
153
|
"""
|
154
154
|
Export results in specified format.
|
155
155
|
|
@@ -166,9 +166,7 @@ class ModuleCLIBase(abc.ABC):
|
|
166
166
|
return False
|
167
167
|
|
168
168
|
try:
|
169
|
-
export_handler = self.business_logic.create_export_handler(
|
170
|
-
format_type, output_path
|
171
|
-
)
|
169
|
+
export_handler = self.business_logic.create_export_handler(format_type, output_path)
|
172
170
|
|
173
171
|
success = export_handler.export_data(results)
|
174
172
|
|
@@ -205,6 +203,7 @@ class ModuleCLIBase(abc.ABC):
|
|
205
203
|
Returns:
|
206
204
|
Decorated click command function
|
207
205
|
"""
|
206
|
+
|
208
207
|
@click.command(name=command_name)
|
209
208
|
@common_aws_options
|
210
209
|
@rich_output_options
|
@@ -212,8 +211,7 @@ class ModuleCLIBase(abc.ABC):
|
|
212
211
|
@handle_aws_errors(module_name=self.config.name)
|
213
212
|
@handle_validation_errors
|
214
213
|
@validate_profile_access_decorator(operation_type=self.config.primary_operation_type)
|
215
|
-
def standardized_command(profile=None, region=None, dry_run=True,
|
216
|
-
export_format=None, quiet=False, **kwargs):
|
214
|
+
def standardized_command(profile=None, region=None, dry_run=True, export_format=None, quiet=False, **kwargs):
|
217
215
|
"""Execute standardized module operation with enterprise safety."""
|
218
216
|
|
219
217
|
# Module header
|
@@ -227,19 +225,11 @@ class ModuleCLIBase(abc.ABC):
|
|
227
225
|
# Execute with performance monitoring
|
228
226
|
try:
|
229
227
|
with create_progress_bar() as progress:
|
230
|
-
task = progress.add_task(
|
231
|
-
f"[cyan]Executing {self.config.name} operation...",
|
232
|
-
total=100
|
233
|
-
)
|
228
|
+
task = progress.add_task(f"[cyan]Executing {self.config.name} operation...", total=100)
|
234
229
|
|
235
230
|
# Execute primary operation
|
236
231
|
results = self.execute_primary_operation(
|
237
|
-
profile=profile,
|
238
|
-
region=region,
|
239
|
-
dry_run=dry_run,
|
240
|
-
progress=progress,
|
241
|
-
task=task,
|
242
|
-
**kwargs
|
232
|
+
profile=profile, region=region, dry_run=dry_run, progress=progress, task=task, **kwargs
|
243
233
|
)
|
244
234
|
|
245
235
|
progress.update(task, completed=100)
|
@@ -252,9 +242,7 @@ class ModuleCLIBase(abc.ABC):
|
|
252
242
|
metrics = self.calculate_business_metrics(results)
|
253
243
|
|
254
244
|
if not quiet and metrics.annual_savings > 0:
|
255
|
-
print_success(
|
256
|
-
f"💰 Potential annual savings: {format_cost(metrics.annual_savings)}"
|
257
|
-
)
|
245
|
+
print_success(f"💰 Potential annual savings: {format_cost(metrics.annual_savings)}")
|
258
246
|
|
259
247
|
# Export if requested
|
260
248
|
if export_format:
|
@@ -294,17 +282,13 @@ class AnalysisModuleCLI(ModuleCLIBase):
|
|
294
282
|
if metrics.roi_percentage > 0:
|
295
283
|
summary_content.append(f"📊 ROI: {metrics.roi_percentage:.1f}%")
|
296
284
|
|
297
|
-
if hasattr(metrics,
|
285
|
+
if hasattr(metrics, "resources_analyzed"):
|
298
286
|
summary_content.append(f"🔍 Resources Analyzed: {metrics.resources_analyzed:,}")
|
299
287
|
|
300
288
|
summary_content.append(f"⏱️ Execution Time: <{self.config.performance_target_seconds}s target")
|
301
289
|
summary_content.append(f"✅ Confidence: {metrics.confidence_level:.1f}%")
|
302
290
|
|
303
|
-
return Panel(
|
304
|
-
"\n".join(summary_content),
|
305
|
-
title="📈 Executive Summary",
|
306
|
-
border_style="green"
|
307
|
-
)
|
291
|
+
return Panel("\n".join(summary_content), title="📈 Executive Summary", border_style="green")
|
308
292
|
|
309
293
|
|
310
294
|
class OperationsModuleCLI(ModuleCLIBase):
|
@@ -330,7 +314,7 @@ class OperationsModuleCLI(ModuleCLIBase):
|
|
330
314
|
True if operation is safe to proceed
|
331
315
|
"""
|
332
316
|
# Always require explicit approval for destructive operations
|
333
|
-
destructive_operations = [
|
317
|
+
destructive_operations = ["delete", "terminate", "remove", "destroy"]
|
334
318
|
|
335
319
|
if any(op in operation.lower() for op in destructive_operations):
|
336
320
|
print_warning(f"⚠️ Destructive operation requested: {operation}")
|
@@ -360,19 +344,14 @@ class OperationsModuleCLI(ModuleCLIBase):
|
|
360
344
|
"timestamp": datetime.now().isoformat(),
|
361
345
|
"module": self.config.name,
|
362
346
|
"operation": operation,
|
363
|
-
"user": self._session_data.get(
|
364
|
-
"resources_affected": results.get(
|
365
|
-
"success": results.get(
|
366
|
-
"execution_time": results.get(
|
347
|
+
"user": self._session_data.get("validated_profile", "unknown"),
|
348
|
+
"resources_affected": results.get("resources_affected", []),
|
349
|
+
"success": results.get("success", False),
|
350
|
+
"execution_time": results.get("execution_time_seconds", 0),
|
367
351
|
}
|
368
352
|
|
369
353
|
return json.dumps(audit_entry, indent=2)
|
370
354
|
|
371
355
|
|
372
356
|
# Export standardized classes for module implementations
|
373
|
-
__all__ = [
|
374
|
-
"ModuleConfig",
|
375
|
-
"ModuleCLIBase",
|
376
|
-
"AnalysisModuleCLI",
|
377
|
-
"OperationsModuleCLI"
|
378
|
-
]
|
357
|
+
__all__ = ["ModuleConfig", "ModuleCLIBase", "AnalysisModuleCLI", "OperationsModuleCLI"]
|