runbooks 0.9.5__tar.gz → 0.9.7__tar.gz
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-0.9.5/src/runbooks.egg-info → runbooks-0.9.7}/PKG-INFO +1 -1
- {runbooks-0.9.5 → runbooks-0.9.7}/pyproject.toml +1 -1
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/__init__.py +1 -1
- runbooks-0.9.7/src/runbooks/_platform/__init__.py +19 -0
- runbooks-0.9.7/src/runbooks/_platform/core/runbooks_wrapper.py +478 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/cost_optimizer.py +330 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/interfaces.py +3 -3
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/README.md +1 -1
- runbooks-0.9.7/src/runbooks/finops/automation_core.py +643 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/business_cases.py +414 -16
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/cli.py +23 -0
- runbooks-0.9.7/src/runbooks/finops/compute_cost_optimizer.py +865 -0
- runbooks-0.9.7/src/runbooks/finops/ebs_cost_optimizer.py +718 -0
- runbooks-0.9.7/src/runbooks/finops/ebs_optimizer.py +909 -0
- runbooks-0.9.7/src/runbooks/finops/elastic_ip_optimizer.py +675 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/embedded_mcp_validator.py +330 -14
- runbooks-0.9.7/src/runbooks/finops/enterprise_wrappers.py +827 -0
- runbooks-0.9.7/src/runbooks/finops/legacy_migration.py +730 -0
- runbooks-0.9.7/src/runbooks/finops/nat_gateway_optimizer.py +1160 -0
- runbooks-0.9.7/src/runbooks/finops/network_cost_optimizer.py +1387 -0
- runbooks-0.9.7/src/runbooks/finops/notebook_utils.py +596 -0
- runbooks-0.9.7/src/runbooks/finops/reservation_optimizer.py +956 -0
- runbooks-0.9.7/src/runbooks/finops/validation_framework.py +753 -0
- runbooks-0.9.7/src/runbooks/finops/workspaces_analyzer.py +593 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/__init__.py +7 -0
- runbooks-0.9.7/src/runbooks/inventory/collectors/aws_networking.py +626 -0
- runbooks-0.9.7/src/runbooks/inventory/mcp_vpc_validator.py +1091 -0
- runbooks-0.9.7/src/runbooks/inventory/vpc_analyzer.py +1107 -0
- runbooks-0.9.7/src/runbooks/inventory/vpc_architecture_validator.py +939 -0
- runbooks-0.9.7/src/runbooks/inventory/vpc_dependency_analyzer.py +845 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/main.py +425 -39
- runbooks-0.9.7/src/runbooks/operate/vpc_operations.py +2501 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/commvault_ec2_analysis.py +5 -4
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/dynamodb_optimize.py +2 -2
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/rds_instance_list.py +1 -1
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/rds_snapshot_list.py +5 -4
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/workspaces_list.py +2 -2
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/compliance_automation.py +2 -2
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/test_config.py +2 -2
- {runbooks-0.9.5 → runbooks-0.9.7/src/runbooks.egg-info}/PKG-INFO +1 -1
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks.egg-info/SOURCES.txt +19 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks.egg-info/top_level.txt +0 -1
- runbooks-0.9.5/src/runbooks/inventory/collectors/aws_networking.py +0 -275
- runbooks-0.9.5/src/runbooks/operate/vpc_operations.py +0 -1038
- {runbooks-0.9.5 → runbooks-0.9.7}/LICENSE +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/MANIFEST.in +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/setup.cfg +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/conftest.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/__main__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/base.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/app.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/asana-import.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/cfat-checks.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/cfat.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/collectors.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/compliance.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/jira-import.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/runner.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/assessment/validators.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/cli.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/asana-import.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/cfat-checks.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/cfat.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/checks-output.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/cloudshell-console-run.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/cloudshell-download.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/cloudshell-output.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/downloadfile.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/jira-import.csv +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/open-cloudshell.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/docs/report-header.png +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/models.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/package-lock.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/package.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/report.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/reporting/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/reporting/exporters.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/reporting/formatters.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/reporting/templates.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/run-assessment.sh +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/runner.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-cloudtrail-existence.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-config-existence.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-control-tower.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-ec2-existence.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-iam-users.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-legacy-cur.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-org-cloudformation.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/check-vpc-existence.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/create-asanaimport.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/create-backlog.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/create-jiraimport.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/create-report.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/define-account-type.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-enabled-org-policy-types.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-enabled-org-services.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-idc-info.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-org-da-accounts.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-org-details.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-org-member-accounts.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-org-ous.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/get-regions.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/actions/zip-assessment.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/src/types/index.d.ts +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tests/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tests/test_cli.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tests/test_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tests/test_models.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tests/test_reporting.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/tsconfig.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cfat/webpack.config.cjs +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/base.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/infrastructure_optimizer.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/lifecycle_manager.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/mcp_cost_validation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/models.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/monitoring_automation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/notebook_framework.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/cloudops/security_enforcer.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/accuracy_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/aws_utils.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/context_logger.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/cross_module_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/enhanced_exception_handler.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/enhanced_logging_example.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/enhanced_logging_integration_example.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/enterprise_audit_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/logger.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/logging_integration_helper.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/mcp_cost_explorer_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/mcp_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/performance_monitor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/profile_utils.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/common/rich_utils.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/config.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/enterprise/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/enterprise/error_handling.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/enterprise/logging.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/enterprise/multi_tenant.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/feedback/user_feedback_collector.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/account_resolver.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/accuracy_cross_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/aws_client.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/budget_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/commvault_ec2_analysis.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/cost_optimizer.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/cost_processor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/dashboard_router.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/dashboard_runner.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/enhanced_dashboard_runner.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/enhanced_progress.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/enhanced_trend_visualization.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/finops_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/finops_scenarios.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/helpers.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/iam_guidance.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/main.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/markdown_exporter.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/multi_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/optimizer.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/profile_processor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/runbooks.inventory.organizations_discovery.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/runbooks.security.report_generator.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/runbooks.security.run_script.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/runbooks.security.security_export.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/scenarios.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/schemas.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/service_mapping.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/single_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/results_test_finops_dashboard.xml +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/run_comprehensive_tests.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/run_tests.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_finops_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_performance.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_performance_benchmarks.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_reference_images_validation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/test_single_account_features.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/tests/validate_test_suite.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/types.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/finops/visualisations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/hitl/enhanced_workflow_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/.gitignore +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/ArgumentsClass.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/LandingZone/delete_lz.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/common_test_data.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/common_test_functions.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/script_test_data.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/setup.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/src.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_Inventory_Modules.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_cfn_describe_stacks.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_ec2_describe_instances.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_lambda_list_functions.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_moto_integration_example.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/Tests/test_org_list_accounts.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/account_class.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/all_my_instances_wrapper.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/artifacts/scale-optimize-status.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/aws_decorators.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/check_cloudtrail_compliance.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/check_controltower_readiness.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/check_landingzone_readiness.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/aws_comprehensive.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/aws_compute.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/aws_management.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/base.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/collectors/enterprise_scale.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/core/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/core/collector.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/core/formatter.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/draw_org_structure.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/ec2_vpc_utils.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_cfn_drift_detection.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_cfn_orphaned_stacks.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_cfn_stackset_drift.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_ec2_security_groups.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_landingzone_versions.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/find_vpc_flow_logs.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/inventory.sh +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/inventory_modules.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_cfn_stacks.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_cfn_stackset_operation_results.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_cfn_stackset_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_cfn_stacksets.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_config_recorders_delivery_channels.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ds_directories.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ec2_availability_zones.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ec2_ebs_volumes.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ec2_instances.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ecs_clusters_and_tasks.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_elbs_load_balancers.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_enis_network_interfaces.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_guardduty_detectors.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_iam_policies.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_iam_roles.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_iam_saml_providers.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_lambda_functions.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_org_accounts.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_org_accounts_users.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_rds_db_instances.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_route53_hosted_zones.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_servicecatalog_provisioned_products.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_sns_topics.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_ssm_parameters.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_vpc_subnets.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/list_vpcs.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/models/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/models/account.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/models/inventory.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/models/resource.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/organizations_discovery.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/recover_cfn_stack_ids.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/requirements.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/rich_inventory_display.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/run_on_multi_accounts.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/runbooks.inventory.organizations_discovery.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/runbooks.security.report_generator.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/runbooks.security.run_script.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/runbooks.security.security_export.log +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/utils/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/utils/aws_helpers.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/utils/threading_utils.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/utils/validation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/verify_ec2_security_groups.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/inventory/vpc_flow_analyzer.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/metrics/dora_metrics_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/monitoring/performance_monitor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/base.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/cloudformation_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/cloudwatch_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/deployment_framework.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/deployment_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/dynamodb_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/ec2_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/executive_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/iam_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/mcp_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/nat_gateway_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/networking_cost_heatmap.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/privatelink_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/rds_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/s3_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/tagging_operations.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/tags.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/operate/vpc_endpoints.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/Tests/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/Tests/update_policy.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/acm_cert_expired_unused.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/acm_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/api_gateway_list.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/base.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/cloudtrail_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/cloudtrail_s3_modifications.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/cognito_active_users.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/cognito_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/cognito_user_password_reset.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/commons.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/dynamodb_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/dynamodb_server_side_encryption.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/ec2_public_ips.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/ec2_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/ec2_subnet_disable_auto_ip_assignment.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/ec2_unattached_ebs_volumes.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/ec2_unused_security_groups.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/kms_enable_key_rotation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/kms_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/lambda_list.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/lambda_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/multi_account.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/rds_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/requirements.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_block_public_access.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_bucket_public_access.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_disable_static_website_hosting.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_downloader.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_enable_access_logging.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_encryption.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_force_ssl_secure_policy.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_list.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_object_search.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/s3_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/scan_for_phrase.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/remediation/vpc_remediation.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/account_level_bucket_public_access.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/alternate_contacts.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/bucket_public_access.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/cloudwatch_alarm_configuration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/direct_attached_policy.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/guardduty_enabled.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/iam_password_policy.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/iam_user_mfa.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/multi_region_instance_usage.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/multi_region_trail.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/root_access_key.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/root_mfa.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/root_usage.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/trail_enabled.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/checklist/trusted_advisor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/cloudops_automation_security_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/compliance_automation_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/config-origin.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/config.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/enterprise_security_framework.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/enterprise_security_policies.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/executive_security_dashboard.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/integration_test_enterprise_security.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/module_security_integrator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/multi_account_security_controls.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/permission.json +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/real_time_security_monitor.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/report_generator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/report_template_en.html +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/report_template_jp.html +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/report_template_kr.html +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/report_template_vn.html +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/run_script.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/security_baseline_tester.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/security_export.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/common.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/enums.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/language.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/level_const.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/security/utils/permission_list.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/mcp_reliability_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/performance_optimization_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/production_monitoring_framework.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/sre/reliability_monitoring_framework.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/utils/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/utils/logger.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/utils/version_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/validation/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/validation/benchmark.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/validation/cli.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/validation/mcp_validator.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/README.md +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/config.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/cost_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/heatmap_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/manager_interface.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/networking_wrapper.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/rich_formatters.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/__init__.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/conftest.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/test_cli_integration.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/test_cost_engine.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks/vpc/tests/test_networking_wrapper.py +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks.egg-info/dependency_links.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks.egg-info/entry_points.txt +0 -0
- {runbooks-0.9.5 → runbooks-0.9.7}/src/runbooks.egg-info/requires.txt +0 -0
@@ -13,7 +13,7 @@
|
|
13
13
|
## Metadata: https://docs.astral.sh/uv/concepts/projects/config/
|
14
14
|
name = "runbooks"
|
15
15
|
## Enhanced with AWS Operations integration, unified CLI architecture, and comprehensive service operations
|
16
|
-
version = "0.9.
|
16
|
+
version = "0.9.7"
|
17
17
|
description = "CloudOps Automation Toolkit with Enhanced Cloud Foundations Assessment for DevOps and SRE teams."
|
18
18
|
readme = "README.md"
|
19
19
|
requires-python = ">=3.11,<3.14"
|
@@ -61,7 +61,7 @@ s3_ops = S3Operations()
|
|
61
61
|
|
62
62
|
# Centralized Version Management - Single Source of Truth
|
63
63
|
# All modules MUST import __version__ from this location
|
64
|
-
__version__ = "0.9.
|
64
|
+
__version__ = "0.9.7"
|
65
65
|
|
66
66
|
# Fallback for legacy importlib.metadata usage during transition
|
67
67
|
try:
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"""
|
2
|
+
Enterprise FinOps Platform Integration Layer
|
3
|
+
|
4
|
+
This module provides the integration layer between the runbooks package
|
5
|
+
and the FinOps notebook interfaces, enabling business-friendly access
|
6
|
+
to technical cost optimization capabilities.
|
7
|
+
"""
|
8
|
+
|
9
|
+
__version__ = "1.0.0"
|
10
|
+
|
11
|
+
from .core.runbooks_wrapper import RunbooksWrapper
|
12
|
+
from .finops.unit_economics import UnitEconomicsCalculator
|
13
|
+
from .components.validators import ProfileValidator
|
14
|
+
|
15
|
+
__all__ = [
|
16
|
+
"RunbooksWrapper",
|
17
|
+
"UnitEconomicsCalculator",
|
18
|
+
"ProfileValidator"
|
19
|
+
]
|
@@ -0,0 +1,478 @@
|
|
1
|
+
"""
|
2
|
+
Enterprise FinOps Platform - RunbooksWrapper
|
3
|
+
Provides unified access to all runbooks CLI commands with MCP validation and Rich output
|
4
|
+
"""
|
5
|
+
import subprocess
|
6
|
+
import json
|
7
|
+
import yaml
|
8
|
+
from typing import Dict, List, Optional, Any, Union
|
9
|
+
from pathlib import Path
|
10
|
+
from datetime import datetime
|
11
|
+
import pandas as pd
|
12
|
+
|
13
|
+
from rich.console import Console
|
14
|
+
from rich.table import Table
|
15
|
+
from rich.panel import Panel
|
16
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn
|
17
|
+
from rich import box
|
18
|
+
|
19
|
+
console = Console()
|
20
|
+
|
21
|
+
class RunbooksWrapper:
|
22
|
+
"""
|
23
|
+
Enterprise wrapper for runbooks CLI commands with MCP validation and Rich output.
|
24
|
+
|
25
|
+
Provides Jupyter-friendly interface to all runbooks functionality:
|
26
|
+
- Inventory collection and analysis
|
27
|
+
- FinOps cost analysis and optimization
|
28
|
+
- Security assessments and remediation
|
29
|
+
- CFAT well-architected evaluations
|
30
|
+
- Operations automation
|
31
|
+
- Organization management
|
32
|
+
"""
|
33
|
+
|
34
|
+
def __init__(self, default_profile: Optional[str] = None):
|
35
|
+
"""Initialize wrapper with optional default AWS profile."""
|
36
|
+
self.default_profile = default_profile
|
37
|
+
self.console = Console()
|
38
|
+
|
39
|
+
def _execute_command(self, command: str, capture_output: bool = True) -> Dict[str, Any]:
|
40
|
+
"""
|
41
|
+
Execute runbooks command with error handling and rich output.
|
42
|
+
|
43
|
+
Args:
|
44
|
+
command: Full runbooks command to execute
|
45
|
+
capture_output: Whether to capture command output
|
46
|
+
|
47
|
+
Returns:
|
48
|
+
Dictionary with command result, output, and metadata
|
49
|
+
"""
|
50
|
+
try:
|
51
|
+
with Progress(
|
52
|
+
SpinnerColumn(),
|
53
|
+
TextColumn("[progress.description]{task.description}"),
|
54
|
+
console=console,
|
55
|
+
transient=True,
|
56
|
+
) as progress:
|
57
|
+
progress.add_task(description="Executing command...", total=None)
|
58
|
+
|
59
|
+
result = subprocess.run(
|
60
|
+
command.split(),
|
61
|
+
capture_output=capture_output,
|
62
|
+
text=True,
|
63
|
+
timeout=300 # 5 minute timeout
|
64
|
+
)
|
65
|
+
|
66
|
+
return {
|
67
|
+
"success": result.returncode == 0,
|
68
|
+
"returncode": result.returncode,
|
69
|
+
"stdout": result.stdout,
|
70
|
+
"stderr": result.stderr,
|
71
|
+
"command": command,
|
72
|
+
"timestamp": datetime.now().isoformat()
|
73
|
+
}
|
74
|
+
|
75
|
+
except subprocess.TimeoutExpired:
|
76
|
+
return {
|
77
|
+
"success": False,
|
78
|
+
"error": "Command timed out after 5 minutes",
|
79
|
+
"command": command,
|
80
|
+
"timestamp": datetime.now().isoformat()
|
81
|
+
}
|
82
|
+
except Exception as e:
|
83
|
+
return {
|
84
|
+
"success": False,
|
85
|
+
"error": str(e),
|
86
|
+
"command": command,
|
87
|
+
"timestamp": datetime.now().isoformat()
|
88
|
+
}
|
89
|
+
|
90
|
+
# Inventory Operations
|
91
|
+
def inventory_collect(self,
|
92
|
+
resources: List[str] = None,
|
93
|
+
profile: str = None,
|
94
|
+
all_accounts: bool = False,
|
95
|
+
include_costs: bool = False,
|
96
|
+
regions: List[str] = None) -> pd.DataFrame:
|
97
|
+
"""
|
98
|
+
Collect inventory across AWS accounts and services.
|
99
|
+
|
100
|
+
Args:
|
101
|
+
resources: List of AWS resources (ec2, s3, rds, lambda, etc.)
|
102
|
+
profile: AWS profile to use
|
103
|
+
all_accounts: Scan all accounts in organization
|
104
|
+
include_costs: Include cost analysis
|
105
|
+
regions: Specific regions to scan
|
106
|
+
|
107
|
+
Returns:
|
108
|
+
DataFrame with inventory results
|
109
|
+
"""
|
110
|
+
cmd_parts = ["runbooks", "inventory", "collect"]
|
111
|
+
|
112
|
+
if resources:
|
113
|
+
cmd_parts.extend(["-r", ",".join(resources)])
|
114
|
+
if profile or self.default_profile:
|
115
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
116
|
+
if all_accounts:
|
117
|
+
cmd_parts.append("--all-accounts")
|
118
|
+
if include_costs:
|
119
|
+
cmd_parts.append("--include-costs")
|
120
|
+
if regions:
|
121
|
+
cmd_parts.extend(["--regions", ",".join(regions)])
|
122
|
+
|
123
|
+
command = " ".join(cmd_parts)
|
124
|
+
result = self._execute_command(command)
|
125
|
+
|
126
|
+
if result["success"]:
|
127
|
+
try:
|
128
|
+
# Parse JSON output to DataFrame
|
129
|
+
data = json.loads(result["stdout"])
|
130
|
+
df = pd.DataFrame(data.get("resources", []))
|
131
|
+
self._display_inventory_summary(df)
|
132
|
+
return df
|
133
|
+
except json.JSONDecodeError:
|
134
|
+
console.print("[yellow]Warning: Could not parse JSON output, returning raw text[/yellow]")
|
135
|
+
return pd.DataFrame({"output": [result["stdout"]]})
|
136
|
+
else:
|
137
|
+
console.print(f"[red]Error executing inventory command: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
138
|
+
return pd.DataFrame()
|
139
|
+
|
140
|
+
# FinOps Operations
|
141
|
+
def finops_analyze(self,
|
142
|
+
profile: str = None,
|
143
|
+
all_accounts: bool = False,
|
144
|
+
target_reduction: str = "20-40%",
|
145
|
+
breakdown_by: List[str] = None,
|
146
|
+
export_format: str = "json") -> Dict[str, Any]:
|
147
|
+
"""
|
148
|
+
Perform FinOps cost analysis and optimization recommendations.
|
149
|
+
|
150
|
+
Args:
|
151
|
+
profile: AWS billing profile
|
152
|
+
all_accounts: Analyze all accounts
|
153
|
+
target_reduction: Target cost reduction percentage
|
154
|
+
breakdown_by: Breakdown by service, account, region
|
155
|
+
export_format: Export format (json, csv, html)
|
156
|
+
|
157
|
+
Returns:
|
158
|
+
Dictionary with cost analysis results
|
159
|
+
"""
|
160
|
+
cmd_parts = ["runbooks", "finops", "--analyze"]
|
161
|
+
|
162
|
+
if profile or self.default_profile:
|
163
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
164
|
+
if all_accounts:
|
165
|
+
cmd_parts.append("--all-accounts")
|
166
|
+
if target_reduction:
|
167
|
+
cmd_parts.extend(["--target-reduction", target_reduction])
|
168
|
+
if breakdown_by:
|
169
|
+
cmd_parts.extend(["--breakdown-by", ",".join(breakdown_by)])
|
170
|
+
if export_format:
|
171
|
+
cmd_parts.extend(["--export", export_format])
|
172
|
+
|
173
|
+
command = " ".join(cmd_parts)
|
174
|
+
result = self._execute_command(command)
|
175
|
+
|
176
|
+
if result["success"]:
|
177
|
+
try:
|
178
|
+
data = json.loads(result["stdout"])
|
179
|
+
self._display_finops_summary(data)
|
180
|
+
return data
|
181
|
+
except json.JSONDecodeError:
|
182
|
+
console.print("[yellow]Warning: Could not parse JSON output[/yellow]")
|
183
|
+
return {"raw_output": result["stdout"]}
|
184
|
+
else:
|
185
|
+
console.print(f"[red]Error executing FinOps analysis: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
186
|
+
return {}
|
187
|
+
|
188
|
+
# Security Operations
|
189
|
+
def security_assess(self,
|
190
|
+
profile: str = None,
|
191
|
+
all_accounts: bool = False,
|
192
|
+
checks: str = "all",
|
193
|
+
language: str = "EN",
|
194
|
+
format: str = "json") -> Dict[str, Any]:
|
195
|
+
"""
|
196
|
+
Perform security assessment across accounts.
|
197
|
+
|
198
|
+
Args:
|
199
|
+
profile: AWS profile to use
|
200
|
+
all_accounts: Assess all accounts
|
201
|
+
checks: Specific security checks or "all"
|
202
|
+
language: Report language (EN, JP, KR, VN)
|
203
|
+
format: Output format (json, html, csv)
|
204
|
+
|
205
|
+
Returns:
|
206
|
+
Dictionary with security assessment results
|
207
|
+
"""
|
208
|
+
cmd_parts = ["runbooks", "security", "assess"]
|
209
|
+
|
210
|
+
if profile or self.default_profile:
|
211
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
212
|
+
if all_accounts:
|
213
|
+
cmd_parts.append("--all-accounts")
|
214
|
+
if checks:
|
215
|
+
cmd_parts.extend(["--checks", checks])
|
216
|
+
if language:
|
217
|
+
cmd_parts.extend(["--language", language])
|
218
|
+
if format:
|
219
|
+
cmd_parts.extend(["--format", format])
|
220
|
+
|
221
|
+
command = " ".join(cmd_parts)
|
222
|
+
result = self._execute_command(command)
|
223
|
+
|
224
|
+
if result["success"]:
|
225
|
+
try:
|
226
|
+
data = json.loads(result["stdout"])
|
227
|
+
self._display_security_summary(data)
|
228
|
+
return data
|
229
|
+
except json.JSONDecodeError:
|
230
|
+
return {"raw_output": result["stdout"]}
|
231
|
+
else:
|
232
|
+
console.print(f"[red]Error executing security assessment: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
233
|
+
return {}
|
234
|
+
|
235
|
+
# CFAT Operations
|
236
|
+
def cfat_assess(self,
|
237
|
+
profile: str = None,
|
238
|
+
compliance_framework: str = "AWS Well-Architected",
|
239
|
+
output_format: str = "json",
|
240
|
+
serve_web: bool = False,
|
241
|
+
port: int = 8080) -> Dict[str, Any]:
|
242
|
+
"""
|
243
|
+
Perform Cloud Foundation Assessment Tool evaluation.
|
244
|
+
|
245
|
+
Args:
|
246
|
+
profile: AWS profile to use
|
247
|
+
compliance_framework: Framework to assess against
|
248
|
+
output_format: Output format
|
249
|
+
serve_web: Start web server for results
|
250
|
+
port: Web server port
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
Dictionary with CFAT assessment results
|
254
|
+
"""
|
255
|
+
cmd_parts = ["runbooks", "cfat", "assess"]
|
256
|
+
|
257
|
+
if profile or self.default_profile:
|
258
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
259
|
+
if compliance_framework:
|
260
|
+
cmd_parts.extend(["--compliance-framework", f'"{compliance_framework}"'])
|
261
|
+
if output_format:
|
262
|
+
cmd_parts.extend(["--output", output_format])
|
263
|
+
if serve_web:
|
264
|
+
cmd_parts.extend(["--serve-web", "--port", str(port)])
|
265
|
+
|
266
|
+
command = " ".join(cmd_parts)
|
267
|
+
result = self._execute_command(command)
|
268
|
+
|
269
|
+
if result["success"]:
|
270
|
+
try:
|
271
|
+
data = json.loads(result["stdout"])
|
272
|
+
self._display_cfat_summary(data)
|
273
|
+
return data
|
274
|
+
except json.JSONDecodeError:
|
275
|
+
return {"raw_output": result["stdout"]}
|
276
|
+
else:
|
277
|
+
console.print(f"[red]Error executing CFAT assessment: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
278
|
+
return {}
|
279
|
+
|
280
|
+
# Operations
|
281
|
+
def operate_ec2(self, action: str, instance_ids: List[str], profile: str = None, dry_run: bool = True) -> Dict[str, Any]:
|
282
|
+
"""
|
283
|
+
Perform EC2 operations (start, stop, terminate).
|
284
|
+
|
285
|
+
Args:
|
286
|
+
action: Action to perform (start, stop, terminate)
|
287
|
+
instance_ids: List of instance IDs
|
288
|
+
profile: AWS profile to use
|
289
|
+
dry_run: Perform dry run only
|
290
|
+
|
291
|
+
Returns:
|
292
|
+
Dictionary with operation results
|
293
|
+
"""
|
294
|
+
cmd_parts = ["runbooks", "operate", "ec2", action]
|
295
|
+
cmd_parts.extend(["--instance-ids"] + instance_ids)
|
296
|
+
|
297
|
+
if profile or self.default_profile:
|
298
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
299
|
+
if dry_run:
|
300
|
+
cmd_parts.append("--dry-run")
|
301
|
+
|
302
|
+
command = " ".join(cmd_parts)
|
303
|
+
result = self._execute_command(command)
|
304
|
+
|
305
|
+
if result["success"]:
|
306
|
+
console.print(f"[green]✅ EC2 {action} operation completed successfully[/green]")
|
307
|
+
return {"success": True, "output": result["stdout"]}
|
308
|
+
else:
|
309
|
+
console.print(f"[red]❌ EC2 {action} operation failed: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
310
|
+
return {"success": False, "error": result.get("error", result.get("stderr"))}
|
311
|
+
|
312
|
+
# Organization Management
|
313
|
+
def org_list_ous(self, profile: str = None, output_format: str = "table") -> pd.DataFrame:
|
314
|
+
"""
|
315
|
+
List organizational units in AWS Organizations.
|
316
|
+
|
317
|
+
Args:
|
318
|
+
profile: AWS management profile
|
319
|
+
output_format: Output format (table, json)
|
320
|
+
|
321
|
+
Returns:
|
322
|
+
DataFrame with OU information
|
323
|
+
"""
|
324
|
+
cmd_parts = ["runbooks", "org", "list-ous"]
|
325
|
+
|
326
|
+
if profile or self.default_profile:
|
327
|
+
cmd_parts.extend(["--profile", profile or self.default_profile])
|
328
|
+
if output_format:
|
329
|
+
cmd_parts.extend(["--output", output_format])
|
330
|
+
|
331
|
+
command = " ".join(cmd_parts)
|
332
|
+
result = self._execute_command(command)
|
333
|
+
|
334
|
+
if result["success"]:
|
335
|
+
try:
|
336
|
+
if output_format == "json":
|
337
|
+
data = json.loads(result["stdout"])
|
338
|
+
df = pd.DataFrame(data.get("organizational_units", []))
|
339
|
+
else:
|
340
|
+
# Parse table output
|
341
|
+
df = pd.DataFrame({"output": [result["stdout"]]})
|
342
|
+
return df
|
343
|
+
except json.JSONDecodeError:
|
344
|
+
return pd.DataFrame({"output": [result["stdout"]]})
|
345
|
+
else:
|
346
|
+
console.print(f"[red]Error listing OUs: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
347
|
+
return pd.DataFrame()
|
348
|
+
|
349
|
+
# MCP Validation
|
350
|
+
def validate_mcp_servers(self, billing_profile: str = None) -> Dict[str, Any]:
|
351
|
+
"""
|
352
|
+
Validate MCP servers connectivity and accuracy.
|
353
|
+
|
354
|
+
Args:
|
355
|
+
billing_profile: Billing profile for validation
|
356
|
+
|
357
|
+
Returns:
|
358
|
+
Dictionary with validation results
|
359
|
+
"""
|
360
|
+
cmd_parts = ["runbooks", "validate", "mcp-servers"]
|
361
|
+
|
362
|
+
if billing_profile or self.default_profile:
|
363
|
+
cmd_parts.extend(["--billing-profile", billing_profile or self.default_profile])
|
364
|
+
|
365
|
+
command = " ".join(cmd_parts)
|
366
|
+
result = self._execute_command(command)
|
367
|
+
|
368
|
+
if result["success"]:
|
369
|
+
try:
|
370
|
+
data = json.loads(result["stdout"])
|
371
|
+
self._display_mcp_validation_summary(data)
|
372
|
+
return data
|
373
|
+
except json.JSONDecodeError:
|
374
|
+
return {"raw_output": result["stdout"]}
|
375
|
+
else:
|
376
|
+
console.print(f"[red]Error validating MCP servers: {result.get('error', result.get('stderr', 'Unknown error'))}[/red]")
|
377
|
+
return {}
|
378
|
+
|
379
|
+
# Rich Display Methods
|
380
|
+
def _display_inventory_summary(self, df: pd.DataFrame):
|
381
|
+
"""Display inventory results summary with Rich formatting."""
|
382
|
+
if df.empty:
|
383
|
+
console.print("[yellow]No inventory data to display[/yellow]")
|
384
|
+
return
|
385
|
+
|
386
|
+
table = Table(title="📊 Inventory Summary", box=box.ROUNDED)
|
387
|
+
table.add_column("Metric", style="cyan")
|
388
|
+
table.add_column("Count", justify="right", style="green")
|
389
|
+
|
390
|
+
total_resources = len(df)
|
391
|
+
resource_types = df.get("ResourceType", pd.Series()).nunique() if "ResourceType" in df.columns else 0
|
392
|
+
accounts = df.get("AccountId", pd.Series()).nunique() if "AccountId" in df.columns else 0
|
393
|
+
|
394
|
+
table.add_row("Total Resources", str(total_resources))
|
395
|
+
table.add_row("Resource Types", str(resource_types))
|
396
|
+
table.add_row("AWS Accounts", str(accounts))
|
397
|
+
|
398
|
+
console.print(table)
|
399
|
+
|
400
|
+
def _display_finops_summary(self, data: Dict[str, Any]):
|
401
|
+
"""Display FinOps analysis summary with Rich formatting."""
|
402
|
+
panel_content = []
|
403
|
+
|
404
|
+
if "total_cost" in data:
|
405
|
+
panel_content.append(f"💰 Total Monthly Cost: ${data['total_cost']:,.2f}")
|
406
|
+
if "potential_savings" in data:
|
407
|
+
panel_content.append(f"💸 Potential Savings: ${data['potential_savings']:,.2f}")
|
408
|
+
if "optimization_recommendations" in data:
|
409
|
+
panel_content.append(f"📋 Recommendations: {len(data['optimization_recommendations'])}")
|
410
|
+
|
411
|
+
content = "\n".join(panel_content) if panel_content else "FinOps analysis completed"
|
412
|
+
|
413
|
+
console.print(Panel(
|
414
|
+
content,
|
415
|
+
title="💰 FinOps Analysis Summary",
|
416
|
+
border_style="green"
|
417
|
+
))
|
418
|
+
|
419
|
+
def _display_security_summary(self, data: Dict[str, Any]):
|
420
|
+
"""Display security assessment summary with Rich formatting."""
|
421
|
+
panel_content = []
|
422
|
+
|
423
|
+
if "total_checks" in data:
|
424
|
+
panel_content.append(f"🔍 Total Checks: {data['total_checks']}")
|
425
|
+
if "passed_checks" in data:
|
426
|
+
panel_content.append(f"✅ Passed: {data['passed_checks']}")
|
427
|
+
if "failed_checks" in data:
|
428
|
+
panel_content.append(f"❌ Failed: {data['failed_checks']}")
|
429
|
+
if "compliance_score" in data:
|
430
|
+
panel_content.append(f"📊 Compliance Score: {data['compliance_score']}%")
|
431
|
+
|
432
|
+
content = "\n".join(panel_content) if panel_content else "Security assessment completed"
|
433
|
+
|
434
|
+
console.print(Panel(
|
435
|
+
content,
|
436
|
+
title="🔒 Security Assessment Summary",
|
437
|
+
border_style="red"
|
438
|
+
))
|
439
|
+
|
440
|
+
def _display_cfat_summary(self, data: Dict[str, Any]):
|
441
|
+
"""Display CFAT assessment summary with Rich formatting."""
|
442
|
+
panel_content = []
|
443
|
+
|
444
|
+
if "well_architected_score" in data:
|
445
|
+
panel_content.append(f"🏗️ Well-Architected Score: {data['well_architected_score']}%")
|
446
|
+
if "pillars_assessed" in data:
|
447
|
+
panel_content.append(f"📋 Pillars Assessed: {len(data['pillars_assessed'])}")
|
448
|
+
if "high_risk_findings" in data:
|
449
|
+
panel_content.append(f"⚠️ High Risk Findings: {data['high_risk_findings']}")
|
450
|
+
|
451
|
+
content = "\n".join(panel_content) if panel_content else "CFAT assessment completed"
|
452
|
+
|
453
|
+
console.print(Panel(
|
454
|
+
content,
|
455
|
+
title="🏗️ CFAT Assessment Summary",
|
456
|
+
border_style="blue"
|
457
|
+
))
|
458
|
+
|
459
|
+
def _display_mcp_validation_summary(self, data: Dict[str, Any]):
|
460
|
+
"""Display MCP validation summary with Rich formatting."""
|
461
|
+
panel_content = []
|
462
|
+
|
463
|
+
if "accuracy_rate" in data:
|
464
|
+
panel_content.append(f"🎯 Accuracy Rate: {data['accuracy_rate']}%")
|
465
|
+
if "servers_validated" in data:
|
466
|
+
panel_content.append(f"🖥️ Servers Validated: {data['servers_validated']}")
|
467
|
+
if "validation_time" in data:
|
468
|
+
panel_content.append(f"⏱️ Validation Time: {data['validation_time']}s")
|
469
|
+
|
470
|
+
content = "\n".join(panel_content) if panel_content else "MCP validation completed"
|
471
|
+
|
472
|
+
color = "green" if data.get("accuracy_rate", 0) >= 99.5 else "yellow"
|
473
|
+
|
474
|
+
console.print(Panel(
|
475
|
+
content,
|
476
|
+
title="🔍 MCP Validation Summary",
|
477
|
+
border_style=color
|
478
|
+
))
|