runbooks 1.1.3__py3-none-any.whl → 1.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runbooks/__init__.py +31 -2
- runbooks/__init___optimized.py +18 -4
- runbooks/_platform/__init__.py +1 -5
- runbooks/_platform/core/runbooks_wrapper.py +141 -138
- runbooks/aws2/accuracy_validator.py +812 -0
- runbooks/base.py +7 -0
- runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
- runbooks/cfat/assessment/compliance.py +8 -8
- runbooks/cfat/assessment/runner.py +1 -0
- runbooks/cfat/cloud_foundations_assessment.py +227 -239
- runbooks/cfat/models.py +6 -2
- runbooks/cfat/tests/__init__.py +6 -1
- runbooks/cli/__init__.py +13 -0
- runbooks/cli/commands/cfat.py +274 -0
- runbooks/cli/commands/finops.py +1164 -0
- runbooks/cli/commands/inventory.py +379 -0
- runbooks/cli/commands/operate.py +239 -0
- runbooks/cli/commands/security.py +248 -0
- runbooks/cli/commands/validation.py +825 -0
- runbooks/cli/commands/vpc.py +310 -0
- runbooks/cli/registry.py +107 -0
- runbooks/cloudops/__init__.py +23 -30
- runbooks/cloudops/base.py +96 -107
- runbooks/cloudops/cost_optimizer.py +549 -547
- runbooks/cloudops/infrastructure_optimizer.py +5 -4
- runbooks/cloudops/interfaces.py +226 -227
- runbooks/cloudops/lifecycle_manager.py +5 -4
- runbooks/cloudops/mcp_cost_validation.py +252 -235
- runbooks/cloudops/models.py +78 -53
- runbooks/cloudops/monitoring_automation.py +5 -4
- runbooks/cloudops/notebook_framework.py +179 -215
- runbooks/cloudops/security_enforcer.py +125 -159
- runbooks/common/accuracy_validator.py +11 -0
- runbooks/common/aws_pricing.py +349 -326
- runbooks/common/aws_pricing_api.py +211 -212
- runbooks/common/aws_profile_manager.py +341 -0
- runbooks/common/aws_utils.py +75 -80
- runbooks/common/business_logic.py +127 -105
- runbooks/common/cli_decorators.py +36 -60
- runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
- runbooks/common/cross_account_manager.py +198 -205
- runbooks/common/date_utils.py +27 -39
- runbooks/common/decorators.py +235 -0
- runbooks/common/dry_run_examples.py +173 -208
- runbooks/common/dry_run_framework.py +157 -155
- runbooks/common/enhanced_exception_handler.py +15 -4
- runbooks/common/enhanced_logging_example.py +50 -64
- runbooks/common/enhanced_logging_integration_example.py +65 -37
- runbooks/common/env_utils.py +16 -16
- runbooks/common/error_handling.py +40 -38
- runbooks/common/lazy_loader.py +41 -23
- runbooks/common/logging_integration_helper.py +79 -86
- runbooks/common/mcp_cost_explorer_integration.py +478 -495
- runbooks/common/mcp_integration.py +63 -74
- runbooks/common/memory_optimization.py +140 -118
- runbooks/common/module_cli_base.py +37 -58
- runbooks/common/organizations_client.py +176 -194
- runbooks/common/patterns.py +204 -0
- runbooks/common/performance_monitoring.py +67 -71
- runbooks/common/performance_optimization_engine.py +283 -274
- runbooks/common/profile_utils.py +248 -39
- runbooks/common/rich_utils.py +643 -92
- runbooks/common/sre_performance_suite.py +177 -186
- runbooks/enterprise/__init__.py +1 -1
- runbooks/enterprise/logging.py +144 -106
- runbooks/enterprise/security.py +187 -204
- runbooks/enterprise/validation.py +43 -56
- runbooks/finops/__init__.py +29 -33
- runbooks/finops/account_resolver.py +1 -1
- runbooks/finops/advanced_optimization_engine.py +980 -0
- runbooks/finops/automation_core.py +268 -231
- runbooks/finops/business_case_config.py +184 -179
- runbooks/finops/cli.py +660 -139
- runbooks/finops/commvault_ec2_analysis.py +157 -164
- runbooks/finops/compute_cost_optimizer.py +336 -320
- runbooks/finops/config.py +20 -20
- runbooks/finops/cost_optimizer.py +488 -622
- runbooks/finops/cost_processor.py +332 -214
- runbooks/finops/dashboard_runner.py +1006 -172
- runbooks/finops/ebs_cost_optimizer.py +991 -657
- runbooks/finops/elastic_ip_optimizer.py +317 -257
- runbooks/finops/enhanced_mcp_integration.py +340 -0
- runbooks/finops/enhanced_progress.py +40 -37
- runbooks/finops/enhanced_trend_visualization.py +3 -2
- runbooks/finops/enterprise_wrappers.py +230 -292
- runbooks/finops/executive_export.py +203 -160
- runbooks/finops/helpers.py +130 -288
- runbooks/finops/iam_guidance.py +1 -1
- runbooks/finops/infrastructure/__init__.py +80 -0
- runbooks/finops/infrastructure/commands.py +506 -0
- runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
- runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
- runbooks/finops/markdown_exporter.py +338 -175
- runbooks/finops/mcp_validator.py +1952 -0
- runbooks/finops/nat_gateway_optimizer.py +1513 -482
- runbooks/finops/network_cost_optimizer.py +657 -587
- runbooks/finops/notebook_utils.py +226 -188
- runbooks/finops/optimization_engine.py +1136 -0
- runbooks/finops/optimizer.py +25 -29
- runbooks/finops/rds_snapshot_optimizer.py +367 -411
- runbooks/finops/reservation_optimizer.py +427 -363
- runbooks/finops/scenario_cli_integration.py +77 -78
- runbooks/finops/scenarios.py +1278 -439
- runbooks/finops/schemas.py +218 -182
- runbooks/finops/snapshot_manager.py +2289 -0
- runbooks/finops/tests/test_finops_dashboard.py +3 -3
- runbooks/finops/tests/test_reference_images_validation.py +2 -2
- runbooks/finops/tests/test_single_account_features.py +17 -17
- runbooks/finops/tests/validate_test_suite.py +1 -1
- runbooks/finops/types.py +3 -3
- runbooks/finops/validation_framework.py +263 -269
- runbooks/finops/vpc_cleanup_exporter.py +191 -146
- runbooks/finops/vpc_cleanup_optimizer.py +593 -575
- runbooks/finops/workspaces_analyzer.py +171 -182
- runbooks/hitl/enhanced_workflow_engine.py +1 -1
- runbooks/integration/__init__.py +89 -0
- runbooks/integration/mcp_integration.py +1920 -0
- runbooks/inventory/CLAUDE.md +816 -0
- runbooks/inventory/README.md +3 -3
- runbooks/inventory/Tests/common_test_data.py +30 -30
- runbooks/inventory/__init__.py +2 -2
- runbooks/inventory/cloud_foundations_integration.py +144 -149
- runbooks/inventory/collectors/aws_comprehensive.py +28 -11
- runbooks/inventory/collectors/aws_networking.py +111 -101
- runbooks/inventory/collectors/base.py +4 -0
- runbooks/inventory/core/collector.py +495 -313
- runbooks/inventory/discovery.md +2 -2
- runbooks/inventory/drift_detection_cli.py +69 -96
- runbooks/inventory/find_ec2_security_groups.py +1 -1
- runbooks/inventory/inventory_mcp_cli.py +48 -46
- runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
- runbooks/inventory/mcp_inventory_validator.py +549 -465
- runbooks/inventory/mcp_vpc_validator.py +359 -442
- runbooks/inventory/organizations_discovery.py +56 -52
- runbooks/inventory/rich_inventory_display.py +33 -32
- runbooks/inventory/unified_validation_engine.py +278 -251
- runbooks/inventory/vpc_analyzer.py +733 -696
- runbooks/inventory/vpc_architecture_validator.py +293 -348
- runbooks/inventory/vpc_dependency_analyzer.py +382 -378
- runbooks/inventory/vpc_flow_analyzer.py +3 -3
- runbooks/main.py +152 -9147
- runbooks/main_final.py +91 -60
- runbooks/main_minimal.py +22 -10
- runbooks/main_optimized.py +131 -100
- runbooks/main_ultra_minimal.py +7 -2
- runbooks/mcp/__init__.py +36 -0
- runbooks/mcp/integration.py +679 -0
- runbooks/metrics/dora_metrics_engine.py +2 -2
- runbooks/monitoring/performance_monitor.py +9 -4
- runbooks/operate/dynamodb_operations.py +3 -1
- runbooks/operate/ec2_operations.py +145 -137
- runbooks/operate/iam_operations.py +146 -152
- runbooks/operate/mcp_integration.py +1 -1
- runbooks/operate/networking_cost_heatmap.py +33 -10
- runbooks/operate/privatelink_operations.py +1 -1
- runbooks/operate/rds_operations.py +223 -254
- runbooks/operate/s3_operations.py +107 -118
- runbooks/operate/vpc_endpoints.py +1 -1
- runbooks/operate/vpc_operations.py +648 -618
- runbooks/remediation/base.py +1 -1
- runbooks/remediation/commons.py +10 -7
- runbooks/remediation/commvault_ec2_analysis.py +71 -67
- runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
- runbooks/remediation/multi_account.py +24 -21
- runbooks/remediation/rds_snapshot_list.py +91 -65
- runbooks/remediation/remediation_cli.py +92 -146
- runbooks/remediation/universal_account_discovery.py +83 -79
- runbooks/remediation/workspaces_list.py +49 -44
- runbooks/security/__init__.py +19 -0
- runbooks/security/assessment_runner.py +1150 -0
- runbooks/security/baseline_checker.py +812 -0
- runbooks/security/cloudops_automation_security_validator.py +509 -535
- runbooks/security/compliance_automation_engine.py +17 -17
- runbooks/security/config/__init__.py +2 -2
- runbooks/security/config/compliance_config.py +50 -50
- runbooks/security/config_template_generator.py +63 -76
- runbooks/security/enterprise_security_framework.py +1 -1
- runbooks/security/executive_security_dashboard.py +519 -508
- runbooks/security/integration_test_enterprise_security.py +5 -3
- runbooks/security/multi_account_security_controls.py +959 -1210
- runbooks/security/real_time_security_monitor.py +422 -444
- runbooks/security/run_script.py +1 -1
- runbooks/security/security_baseline_tester.py +1 -1
- runbooks/security/security_cli.py +143 -112
- runbooks/security/test_2way_validation.py +439 -0
- runbooks/security/two_way_validation_framework.py +852 -0
- runbooks/sre/mcp_reliability_engine.py +6 -6
- runbooks/sre/production_monitoring_framework.py +167 -177
- runbooks/tdd/__init__.py +15 -0
- runbooks/tdd/cli.py +1071 -0
- runbooks/utils/__init__.py +14 -17
- runbooks/utils/logger.py +7 -2
- runbooks/utils/version_validator.py +51 -48
- runbooks/validation/__init__.py +6 -6
- runbooks/validation/cli.py +9 -3
- runbooks/validation/comprehensive_2way_validator.py +754 -708
- runbooks/validation/mcp_validator.py +906 -228
- runbooks/validation/terraform_citations_validator.py +104 -115
- runbooks/validation/terraform_drift_detector.py +447 -451
- runbooks/vpc/README.md +617 -0
- runbooks/vpc/__init__.py +8 -1
- runbooks/vpc/analyzer.py +577 -0
- runbooks/vpc/cleanup_wrapper.py +476 -413
- runbooks/vpc/cli_cloudtrail_commands.py +339 -0
- runbooks/vpc/cli_mcp_validation_commands.py +480 -0
- runbooks/vpc/cloudtrail_audit_integration.py +717 -0
- runbooks/vpc/config.py +92 -97
- runbooks/vpc/cost_engine.py +411 -148
- runbooks/vpc/cost_explorer_integration.py +553 -0
- runbooks/vpc/cross_account_session.py +101 -106
- runbooks/vpc/enhanced_mcp_validation.py +917 -0
- runbooks/vpc/eni_gate_validator.py +961 -0
- runbooks/vpc/heatmap_engine.py +190 -162
- runbooks/vpc/mcp_no_eni_validator.py +681 -640
- runbooks/vpc/nat_gateway_optimizer.py +358 -0
- runbooks/vpc/networking_wrapper.py +15 -8
- runbooks/vpc/pdca_remediation_planner.py +528 -0
- runbooks/vpc/performance_optimized_analyzer.py +219 -231
- runbooks/vpc/runbooks_adapter.py +1167 -241
- runbooks/vpc/tdd_red_phase_stubs.py +601 -0
- runbooks/vpc/test_data_loader.py +358 -0
- runbooks/vpc/tests/conftest.py +314 -4
- runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
- runbooks/vpc/tests/test_cost_engine.py +0 -2
- runbooks/vpc/topology_generator.py +326 -0
- runbooks/vpc/unified_scenarios.py +1302 -1129
- runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
- runbooks-1.1.5.dist-info/METADATA +328 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
- runbooks/finops/README.md +0 -414
- runbooks/finops/accuracy_cross_validator.py +0 -647
- runbooks/finops/business_cases.py +0 -950
- runbooks/finops/dashboard_router.py +0 -922
- runbooks/finops/ebs_optimizer.py +0 -956
- runbooks/finops/embedded_mcp_validator.py +0 -1629
- runbooks/finops/enhanced_dashboard_runner.py +0 -527
- runbooks/finops/finops_dashboard.py +0 -584
- runbooks/finops/finops_scenarios.py +0 -1218
- runbooks/finops/legacy_migration.py +0 -730
- runbooks/finops/multi_dashboard.py +0 -1519
- runbooks/finops/single_dashboard.py +0 -1113
- runbooks/finops/unlimited_scenarios.py +0 -393
- runbooks-1.1.3.dist-info/METADATA +0 -799
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
@@ -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
|
runbooks/cli/registry.py
ADDED
@@ -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
|
runbooks/cloudops/__init__.py
CHANGED
@@ -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
|
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
|
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
|