runbooks 1.1.5__tar.gz → 1.1.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-1.1.5/src/runbooks.egg-info → runbooks-1.1.7}/PKG-INFO +3 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/pyproject.toml +4 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/__init__.py +1 -1
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/finops.py +29 -5
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/inventory.py +40 -87
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/accuracy_validator.py +6 -12
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/cli_decorators.py +61 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/mcp_integration.py +38 -7
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/rich_utils.py +116 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/CLAUDE.md +1 -1
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/aws_decorators.py +2 -3
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/check_cloudtrail_compliance.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/check_controltower_readiness.py +152 -151
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/check_landingzone_readiness.py +85 -84
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/core/formatter.py +11 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/draw_org_structure.py +8 -9
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/ec2_vpc_utils.py +2 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_cfn_drift_detection.py +5 -7
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_cfn_orphaned_stacks.py +7 -9
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_cfn_stackset_drift.py +5 -6
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_ec2_security_groups.py +48 -42
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_landingzone_versions.py +4 -6
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/find_vpc_flow_logs.py +7 -9
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/inventory_modules.py +103 -91
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_cfn_stacks.py +9 -10
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_cfn_stackset_operation_results.py +1 -3
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_cfn_stackset_operations.py +79 -57
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_cfn_stacksets.py +8 -10
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_config_recorders_delivery_channels.py +49 -39
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ds_directories.py +65 -53
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ec2_availability_zones.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ec2_ebs_volumes.py +32 -35
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ec2_instances.py +23 -28
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ecs_clusters_and_tasks.py +26 -34
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_elbs_load_balancers.py +22 -20
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_enis_network_interfaces.py +26 -33
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_guardduty_detectors.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_iam_policies.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_iam_roles.py +5 -7
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_iam_saml_providers.py +4 -6
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_lambda_functions.py +38 -38
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_org_accounts.py +6 -8
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_org_accounts_users.py +55 -44
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_rds_db_instances.py +31 -33
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_route53_hosted_zones.py +3 -5
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_servicecatalog_provisioned_products.py +37 -41
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_sns_topics.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_ssm_parameters.py +4 -7
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_vpc_subnets.py +2 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_vpcs.py +7 -10
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/mcp_inventory_validator.py +5 -3
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/organizations_discovery.py +8 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/recover_cfn_stack_ids.py +7 -8
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/requirements.txt +0 -1
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/rich_inventory_display.py +2 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/run_on_multi_accounts.py +3 -5
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/unified_validation_engine.py +3 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/verify_ec2_security_groups.py +1 -1
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/vpc_analyzer.py +3 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/vpc_dependency_analyzer.py +2 -2
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/terraform_drift_detector.py +16 -5
- {runbooks-1.1.5 → runbooks-1.1.7/src/runbooks.egg-info}/PKG-INFO +3 -4
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks.egg-info/requires.txt +2 -3
- {runbooks-1.1.5 → runbooks-1.1.7}/LICENSE +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/MANIFEST.in +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/setup.cfg +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/conftest.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/__init__.py.backup +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/__init___optimized.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/__main__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/_platform/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/_platform/core/runbooks_wrapper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/aws2/accuracy_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/WEIGHT_CONFIG_README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/app.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/asana-import.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/cfat-checks.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/cfat.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/collectors.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/compliance.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/jira-import.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/runner.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/assessment/validators.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/cloud_foundations_assessment.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/asana-import.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/cfat-checks.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/cfat.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/checks-output.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/cloudshell-console-run.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/cloudshell-download.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/cloudshell-output.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/downloadfile.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/jira-import.csv +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/open-cloudshell.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/docs/report-header.png +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/models.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/package-lock.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/package.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/report.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/reporting/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/reporting/exporters.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/reporting/formatters.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/reporting/templates.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/run-assessment.sh +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/runner.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-cloudtrail-existence.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-config-existence.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-control-tower.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-ec2-existence.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-iam-users.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-legacy-cur.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-org-cloudformation.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/check-vpc-existence.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/create-asanaimport.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/create-backlog.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/create-jiraimport.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/create-report.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/define-account-type.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-enabled-org-policy-types.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-enabled-org-services.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-idc-info.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-org-da-accounts.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-org-details.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-org-member-accounts.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-org-ous.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/get-regions.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/actions/zip-assessment.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/src/types/index.d.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/test_cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/test_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/test_models.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/test_reporting.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tests/test_weight_configuration.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/tsconfig.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/webpack.config.cjs +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cfat/weight_config.ts +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/cfat.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/operate.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/security.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/commands/vpc.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cli/registry.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/cost_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/infrastructure_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/interfaces.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/lifecycle_manager.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/mcp_cost_validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/models.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/monitoring_automation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/notebook_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/cloudops/security_enforcer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/aws_pricing.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/aws_pricing_api.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/aws_profile_manager.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/aws_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/business_logic.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/comprehensive_cost_explorer_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/context_logger.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/cross_account_manager.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/cross_module_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/date_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/decorators.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/dry_run_examples.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/dry_run_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/enhanced_exception_handler.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/enhanced_logging_example.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/enhanced_logging_integration_example.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/enterprise_audit_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/env_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/error_handling.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/lazy_loader.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/logger.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/logging_integration_helper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/mcp_cost_explorer_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/memory_optimization.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/module_cli_base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/organizations_client.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/patterns.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/performance_monitor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/performance_monitoring.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/performance_optimization_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/profile_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/common/sre_performance_suite.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/error_handling.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/logging.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/multi_tenant.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/security.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/enterprise/validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/feedback/user_feedback_collector.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/account_resolver.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/advanced_optimization_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/automation_core.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/aws_client.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/budget_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/business_case_config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/commvault_ec2_analysis.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/compute_cost_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/cost_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/cost_processor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/dashboard_runner.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/ebs_cost_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/elastic_ip_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/enhanced_mcp_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/enhanced_progress.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/enhanced_trend_visualization.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/enterprise_wrappers.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/executive_export.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/helpers.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/iam_guidance.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/infrastructure/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/infrastructure/commands.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/infrastructure/load_balancer_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/main.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/markdown_exporter.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/mcp_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/nat_gateway_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/network_cost_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/notebook_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/optimization_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/profile_processor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/rds_snapshot_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/reservation_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/scenario_cli_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/scenarios.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/schemas.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/service_mapping.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/snapshot_manager.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/run_comprehensive_tests.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/run_tests.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_finops_dashboard.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_performance.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_performance_benchmarks.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_reference_images_validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/test_single_account_features.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/tests/validate_test_suite.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/types.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/validation_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/visualisations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/vpc_cleanup_exporter.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/vpc_cleanup_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/finops/workspaces_analyzer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/hitl/enhanced_workflow_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/integration/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/integration/mcp_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/.gitignore +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/ArgumentsClass.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/LandingZone/delete_lz.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/common_test_data.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/common_test_functions.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/script_test_data.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/setup.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/src.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_Inventory_Modules.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_cfn_describe_stacks.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_ec2_describe_instances.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_lambda_list_functions.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_moto_integration_example.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/Tests/test_org_list_accounts.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/account_class.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/all_my_instances_wrapper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/cloud_foundations_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/aws_comprehensive.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/aws_compute.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/aws_management.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/aws_networking.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/collectors/enterprise_scale.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/core/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/core/collector.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/discovery.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/drift_detection_cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/inventory.sh +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/inventory_mcp_cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/list_rds_snapshots_aggregator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/mcp_vpc_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/models/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/models/account.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/models/inventory.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/models/resource.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/utils/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/utils/aws_helpers.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/utils/threading_utils.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/utils/validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/vpc_architecture_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/inventory/vpc_flow_analyzer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/main.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/main_final.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/main_minimal.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/main_optimized.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/main_ultra_minimal.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/mcp/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/mcp/integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/metrics/dora_metrics_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/monitoring/performance_monitor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/cloudformation_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/cloudwatch_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/deployment_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/deployment_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/dynamodb_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/ec2_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/executive_dashboard.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/iam_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/mcp_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/nat_gateway_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/networking_cost_heatmap.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/privatelink_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/rds_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/s3_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/tagging_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/tags.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/vpc_endpoints.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/operate/vpc_operations.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/Tests/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/Tests/update_policy.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/acm_cert_expired_unused.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/acm_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/api_gateway_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/base.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/cloudtrail_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/cloudtrail_s3_modifications.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/cognito_active_users.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/cognito_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/cognito_user_password_reset.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/commons.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/commvault_ec2_analysis.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/config/accounts_example.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/dynamodb_optimize.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/dynamodb_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/dynamodb_server_side_encryption.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/ec2_public_ips.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/ec2_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/ec2_subnet_disable_auto_ip_assignment.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/ec2_unattached_ebs_volumes.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/ec2_unused_security_groups.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/kms_enable_key_rotation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/kms_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/lambda_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/lambda_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/multi_account.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/rds_instance_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/rds_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/rds_snapshot_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/remediation_cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/requirements.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_block_public_access.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_bucket_public_access.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_disable_static_website_hosting.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_downloader.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_enable_access_logging.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_encryption.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_force_ssl_secure_policy.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_object_search.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/s3_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/scan_for_phrase.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/universal_account_discovery.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/vpc_remediation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/remediation/workspaces_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/assessment_runner.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/baseline_checker.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/account_level_bucket_public_access.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/alternate_contacts.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/bucket_public_access.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/cloudwatch_alarm_configuration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/direct_attached_policy.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/guardduty_enabled.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/iam_password_policy.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/iam_user_mfa.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/multi_region_instance_usage.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/multi_region_trail.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/root_access_key.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/root_mfa.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/root_usage.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/trail_enabled.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/checklist/trusted_advisor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/cloudops_automation_security_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/compliance_automation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/compliance_automation_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config/compliance_config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config/compliance_weights_example.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config-origin.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/config_template_generator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/enterprise_security_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/enterprise_security_policies.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/executive_security_dashboard.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/integration_test_enterprise_security.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/module_security_integrator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/multi_account_security_controls.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/permission.json +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/real_time_security_monitor.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/report_generator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/report_template_en.html +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/report_template_jp.html +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/report_template_kr.html +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/report_template_vn.html +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/run_script.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/security_baseline_tester.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/security_cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/security_export.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/test_2way_validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/two_way_validation_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/common.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/enums.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/language.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/level_const.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/security/utils/permission_list.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/mcp_reliability_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/performance_optimization_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/production_monitoring_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/sre/reliability_monitoring_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/tdd/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/tdd/cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/utils/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/utils/logger.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/utils/version_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/benchmark.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/cli.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/comprehensive_2way_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/mcp_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/validation/terraform_citations_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/README.md +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/analyzer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cleanup_wrapper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cli_cloudtrail_commands.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cli_mcp_validation_commands.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cloudtrail_audit_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cost_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cost_explorer_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/cross_account_session.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/enhanced_mcp_validation.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/eni_gate_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/heatmap_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/manager_interface.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/mcp_no_eni_validator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/nat_gateway_optimizer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/networking_wrapper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/pdca_remediation_planner.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/performance_optimized_analyzer.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/rich_formatters.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/runbooks_adapter.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tdd_red_phase_stubs.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/test_data_loader.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/__init__.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/conftest.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/test_cleanup_framework.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/test_cli_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/test_config.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/test_cost_engine.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/tests/test_networking_wrapper.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/topology_generator.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/unified_scenarios.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks/vpc/vpc_cleanup_integration.py +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks.egg-info/SOURCES.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks.egg-info/dependency_links.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks.egg-info/entry_points.txt +0 -0
- {runbooks-1.1.5 → runbooks-1.1.7}/src/runbooks.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: runbooks
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.7
|
4
4
|
Summary: CloudOps Automation Toolkit with Enhanced Cloud Foundations Assessment for DevOps and SRE teams.
|
5
5
|
Author-email: Maintainers <nnthanh101@gmail.com>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -31,19 +31,18 @@ Requires-Dist: pydantic>=2.10.0
|
|
31
31
|
Requires-Dist: jinja2>=3.1.4
|
32
32
|
Requires-Dist: werkzeug>=3.1.0
|
33
33
|
Requires-Dist: markdown>=3.7.0
|
34
|
-
Requires-Dist: prettytable>=3.16.0
|
35
34
|
Requires-Dist: simplejson>=3.20.1
|
36
35
|
Requires-Dist: python-dateutil>=2.9.0
|
37
36
|
Requires-Dist: loguru>=0.7.3
|
38
|
-
Requires-Dist: tqdm>=4.67.1
|
39
37
|
Requires-Dist: graphviz>=0.20.1
|
40
|
-
Requires-Dist: rich>=14.
|
38
|
+
Requires-Dist: rich>=14.1.0
|
41
39
|
Requires-Dist: reportlab>=3.6.1
|
42
40
|
Requires-Dist: requests>=2.32.0
|
43
41
|
Requires-Dist: packaging>=21.0
|
44
42
|
Requires-Dist: pyyaml>=6.0.2
|
45
43
|
Requires-Dist: jmespath>=1.0.1
|
46
44
|
Requires-Dist: urllib3<1.27,>=1.26.18
|
45
|
+
Requires-Dist: openapi-spec-validator>=0.7.2
|
47
46
|
Requires-Dist: mcp>=1.12.3
|
48
47
|
Requires-Dist: pandas>=2.3.1
|
49
48
|
Requires-Dist: ipython>=9.4.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 = "1.1.
|
16
|
+
version = "1.1.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"
|
@@ -51,14 +51,12 @@ dependencies = [
|
|
51
51
|
"werkzeug>=3.1.0", # Web server for interactive reports
|
52
52
|
"markdown>=3.7.0", # Markdown processing for reports
|
53
53
|
## Utilities: Logging & Monitoring
|
54
|
-
"prettytable>=3.16.0",
|
55
54
|
"simplejson>=3.20.1",
|
56
55
|
"python-dateutil>=2.9.0",
|
57
56
|
"loguru>=0.7.3",
|
58
|
-
"tqdm>=4.67.1",
|
59
57
|
"graphviz>=0.20.1", # Organization diagram generation
|
60
58
|
## FinOps module dependencies (simplified and aligned)
|
61
|
-
"rich>=14.
|
59
|
+
"rich>=14.1.0", # Rich text and beautiful formatting in the terminal
|
62
60
|
"reportlab>=3.6.1", # PDF generation
|
63
61
|
"requests>=2.32.0", # HTTP requests for version checking
|
64
62
|
"packaging>=21.0", # Core utilities for Python packages
|
@@ -66,6 +64,7 @@ dependencies = [
|
|
66
64
|
## Security Module Dependencies
|
67
65
|
"jmespath>=1.0.1", # JSON query parsing for AWS responses
|
68
66
|
"urllib3>=1.26.18,<1.27", # HTTP library (compatible with awscli)
|
67
|
+
"openapi-spec-validator>=0.7.2", # CloudFormation template validation
|
69
68
|
## 1xOps/CloudOps-Runbooks: https://pypi.org/project/runbooks/
|
70
69
|
# "runbooks>=0.3.0"
|
71
70
|
"mcp>=1.12.3",
|
@@ -94,6 +93,7 @@ dev = [
|
|
94
93
|
"pytest>=8.3.5",
|
95
94
|
"pytest-cov>=6.2.1",
|
96
95
|
"pytest-asyncio>=0.24.0",
|
96
|
+
"aiohttp>=3.12.15", # Async HTTP client for testing
|
97
97
|
"pyyaml>=6.0.2", # YAML parsing for testing environment
|
98
98
|
"ruff>=0.12.7",
|
99
99
|
"mypy>=1.13.0",
|
@@ -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__ = "1.1.
|
64
|
+
__version__ = "1.1.7"
|
65
65
|
|
66
66
|
# Fallback for legacy importlib.metadata usage during transition
|
67
67
|
try:
|
@@ -14,8 +14,14 @@ import click
|
|
14
14
|
# DRY Pattern Manager - eliminates duplication across CLI modules
|
15
15
|
from runbooks.common.patterns import get_console, get_error_handlers, get_click_group_creator, get_common_decorators
|
16
16
|
|
17
|
-
# Import
|
18
|
-
from runbooks.common.
|
17
|
+
# Import unified CLI decorators (v1.1.7 standardization)
|
18
|
+
from runbooks.common.cli_decorators import (
|
19
|
+
common_aws_options,
|
20
|
+
common_output_options,
|
21
|
+
common_multi_account_options,
|
22
|
+
common_filter_options,
|
23
|
+
mcp_validation_option
|
24
|
+
)
|
19
25
|
|
20
26
|
# Single console instance shared across all modules (DRY principle)
|
21
27
|
console = get_console()
|
@@ -47,9 +53,13 @@ def create_finops_group():
|
|
47
53
|
"""
|
48
54
|
|
49
55
|
@click.group(invoke_without_command=True)
|
56
|
+
@common_filter_options
|
57
|
+
@common_multi_account_options
|
58
|
+
@common_output_options
|
50
59
|
@common_aws_options
|
51
60
|
@click.pass_context
|
52
|
-
def finops(ctx, profile, region, dry_run
|
61
|
+
def finops(ctx, profile, region, dry_run, output_format, output_dir, export,
|
62
|
+
all_profiles, profiles, regions, all_regions, tags, accounts):
|
53
63
|
"""
|
54
64
|
Financial operations and cost optimization for AWS resources.
|
55
65
|
|
@@ -64,13 +74,27 @@ def create_finops_group():
|
|
64
74
|
|
65
75
|
Examples:
|
66
76
|
runbooks finops dashboard --profile billing-profile
|
67
|
-
runbooks finops
|
77
|
+
runbooks finops dashboard --all-profiles --timeframe monthly
|
78
|
+
runbooks finops dashboard --regions us-east-1 us-west-2
|
68
79
|
runbooks finops export --format pdf --output-dir ./reports
|
69
80
|
"""
|
70
81
|
# Ensure context object exists
|
71
82
|
if ctx.obj is None:
|
72
83
|
ctx.obj = {}
|
73
|
-
ctx.obj.update({
|
84
|
+
ctx.obj.update({
|
85
|
+
"profile": profile,
|
86
|
+
"region": region,
|
87
|
+
"dry_run": dry_run,
|
88
|
+
"output_format": output_format,
|
89
|
+
"output_dir": output_dir,
|
90
|
+
"export": export,
|
91
|
+
"all_profiles": all_profiles,
|
92
|
+
"profiles": profiles,
|
93
|
+
"regions": regions,
|
94
|
+
"all_regions": all_regions,
|
95
|
+
"tags": tags,
|
96
|
+
"accounts": accounts
|
97
|
+
})
|
74
98
|
|
75
99
|
if ctx.invoked_subcommand is None:
|
76
100
|
click.echo(ctx.get_help())
|
@@ -12,8 +12,14 @@ import click
|
|
12
12
|
import os
|
13
13
|
import sys
|
14
14
|
|
15
|
-
# Import
|
16
|
-
from runbooks.common.
|
15
|
+
# Import unified CLI decorators (v1.1.7 standardization)
|
16
|
+
from runbooks.common.cli_decorators import (
|
17
|
+
common_aws_options,
|
18
|
+
common_output_options,
|
19
|
+
common_multi_account_options,
|
20
|
+
common_filter_options,
|
21
|
+
mcp_validation_option
|
22
|
+
)
|
17
23
|
|
18
24
|
# Test Mode Support: Disable Rich Console in test environments to prevent I/O conflicts
|
19
25
|
# Issue: Rich Console writes to StringIO buffer that Click CliRunner closes, causing ValueError
|
@@ -60,11 +66,13 @@ def create_inventory_group():
|
|
60
66
|
"""
|
61
67
|
|
62
68
|
@click.group(invoke_without_command=True)
|
63
|
-
@common_aws_options
|
64
|
-
@common_output_options
|
65
69
|
@common_filter_options
|
70
|
+
@common_multi_account_options
|
71
|
+
@common_output_options
|
72
|
+
@common_aws_options
|
66
73
|
@click.pass_context
|
67
|
-
def inventory(ctx, profile, region, dry_run, output_format,
|
74
|
+
def inventory(ctx, profile, region, dry_run, output_format, output_dir, export,
|
75
|
+
all_profiles, profiles, regions, all_regions, tags, accounts):
|
68
76
|
"""
|
69
77
|
Universal AWS resource discovery and inventory - works with ANY AWS environment.
|
70
78
|
|
@@ -95,10 +103,14 @@ def create_inventory_group():
|
|
95
103
|
"region": region,
|
96
104
|
"dry_run": dry_run,
|
97
105
|
"output_format": output_format,
|
98
|
-
"
|
106
|
+
"output_dir": output_dir,
|
107
|
+
"export": export,
|
108
|
+
"all_profiles": all_profiles,
|
109
|
+
"profiles": profiles,
|
110
|
+
"regions": regions,
|
111
|
+
"all_regions": all_regions,
|
99
112
|
"tags": tags,
|
100
113
|
"accounts": accounts,
|
101
|
-
"regions": regions,
|
102
114
|
}
|
103
115
|
)
|
104
116
|
|
@@ -106,7 +118,6 @@ def create_inventory_group():
|
|
106
118
|
click.echo(ctx.get_help())
|
107
119
|
|
108
120
|
@inventory.command()
|
109
|
-
@common_aws_options
|
110
121
|
@click.option("--resources", "-r", multiple=True, help="Resource types (ec2, rds, lambda, s3, etc.)")
|
111
122
|
@click.option("--all-resources", is_flag=True, help="Collect all resource types")
|
112
123
|
@click.option("--all-profiles", is_flag=True, help="Collect from all organization accounts")
|
@@ -152,9 +163,6 @@ def create_inventory_group():
|
|
152
163
|
@click.pass_context
|
153
164
|
def collect(
|
154
165
|
ctx,
|
155
|
-
profile,
|
156
|
-
region,
|
157
|
-
dry_run,
|
158
166
|
resources,
|
159
167
|
all_resources,
|
160
168
|
all_profiles,
|
@@ -209,6 +217,11 @@ def create_inventory_group():
|
|
209
217
|
try:
|
210
218
|
from runbooks.inventory.core.collector import run_inventory_collection
|
211
219
|
|
220
|
+
# Access group-level AWS options from context (Bug #1 fix: profile override priority)
|
221
|
+
profile = ctx.obj.get('profile')
|
222
|
+
region = ctx.obj.get('region')
|
223
|
+
dry_run = ctx.obj.get('dry_run', False)
|
224
|
+
|
212
225
|
# Enhanced context for inventory collection
|
213
226
|
context_args = {
|
214
227
|
"profile": profile,
|
@@ -266,18 +279,27 @@ def create_inventory_group():
|
|
266
279
|
help="Resource types to validate",
|
267
280
|
)
|
268
281
|
@click.option("--test-mode", is_flag=True, default=True, help="Run in test mode with sample data")
|
282
|
+
@click.option(
|
283
|
+
"--real-validation",
|
284
|
+
is_flag=True,
|
285
|
+
default=False,
|
286
|
+
help="Run validation against real AWS APIs (requires valid profiles)",
|
287
|
+
)
|
269
288
|
@click.pass_context
|
270
|
-
def validate_mcp(ctx, resource_types, test_mode):
|
289
|
+
def validate_mcp(ctx, resource_types, test_mode, real_validation):
|
271
290
|
"""Test inventory MCP validation functionality."""
|
272
291
|
try:
|
273
292
|
from runbooks.inventory.mcp_inventory_validator import create_inventory_mcp_validator
|
274
293
|
from runbooks.common.profile_utils import get_profile_for_operation
|
275
294
|
|
295
|
+
# Access profile from group-level context (Bug #3 fix: profile override support)
|
296
|
+
profile = ctx.obj.get('profile')
|
297
|
+
|
276
298
|
console.print(f"[blue]🔍 Testing Inventory MCP Validation[/blue]")
|
277
|
-
console.print(f"[dim]Profile: {
|
299
|
+
console.print(f"[dim]Profile: {profile or 'environment fallback'} | Resources: {', '.join(resource_types)} | Test mode: {test_mode}[/dim]")
|
278
300
|
|
279
301
|
# Initialize validator
|
280
|
-
operational_profile = get_profile_for_operation("operational",
|
302
|
+
operational_profile = get_profile_for_operation("operational", profile)
|
281
303
|
validator = create_inventory_mcp_validator([operational_profile])
|
282
304
|
|
283
305
|
# Test with sample data
|
@@ -302,78 +324,9 @@ def create_inventory_group():
|
|
302
324
|
console.print(f"[red]❌ MCP validation test failed: {e}[/red]")
|
303
325
|
raise click.ClickException(str(e))
|
304
326
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
@click.option(
|
310
|
-
"--export-format",
|
311
|
-
type=click.Choice(["json", "csv", "markdown", "table"]),
|
312
|
-
default="table",
|
313
|
-
help="Export format for results",
|
314
|
-
)
|
315
|
-
@click.option("--output-dir", default="./awso_evidence", help="Output directory for exports")
|
316
|
-
@click.option("--filter-account", help="Filter snapshots by specific account ID")
|
317
|
-
@click.option("--filter-status", help="Filter snapshots by status (available, creating, deleting)")
|
318
|
-
@click.option("--max-age-days", type=int, help="Filter snapshots older than specified days")
|
319
|
-
@click.pass_context
|
320
|
-
def discover_rds_snapshots(
|
321
|
-
ctx,
|
322
|
-
profile,
|
323
|
-
region,
|
324
|
-
dry_run,
|
325
|
-
all,
|
326
|
-
combine,
|
327
|
-
export_format,
|
328
|
-
output_dir,
|
329
|
-
filter_account,
|
330
|
-
filter_status,
|
331
|
-
max_age_days,
|
332
|
-
):
|
333
|
-
"""
|
334
|
-
🔍 Discover RDS snapshots using AWS Config organization-aggregator.
|
335
|
-
|
336
|
-
✅ Enhanced Cross-Account Discovery:
|
337
|
-
- Leverages AWS Config organization-aggregator for cross-account access
|
338
|
-
- Multi-region discovery across 7 key AWS regions
|
339
|
-
- Intelligent Organizations detection with graceful standalone fallback
|
340
|
-
- Multi-format exports: JSON, CSV, Markdown, Table
|
341
|
-
|
342
|
-
Profile Priority: User > Environment > Default
|
343
|
-
Universal AWS compatibility with any profile configuration
|
344
|
-
|
345
|
-
Examples:
|
346
|
-
runbooks inventory rds-snapshots # Default profile
|
347
|
-
runbooks inventory rds-snapshots --profile org-profile # Organizations profile
|
348
|
-
runbooks inventory rds-snapshots --all --combine # Multi-account discovery
|
349
|
-
runbooks inventory rds-snapshots --filter-status available # Filter by status
|
350
|
-
runbooks inventory rds-snapshots --max-age-days 30 --csv # Recent snapshots
|
351
|
-
"""
|
352
|
-
try:
|
353
|
-
from runbooks.inventory.rds_snapshots_discovery import run_rds_snapshots_discovery
|
354
|
-
|
355
|
-
# Enhanced context for RDS snapshots discovery
|
356
|
-
context_args = {
|
357
|
-
"profile": profile,
|
358
|
-
"region": region,
|
359
|
-
"dry_run": dry_run,
|
360
|
-
"all": all,
|
361
|
-
"combine": combine,
|
362
|
-
"export_format": export_format,
|
363
|
-
"output_dir": output_dir,
|
364
|
-
"filter_account": filter_account,
|
365
|
-
"filter_status": filter_status,
|
366
|
-
"max_age_days": max_age_days,
|
367
|
-
}
|
368
|
-
|
369
|
-
# Run RDS snapshots discovery
|
370
|
-
return run_rds_snapshots_discovery(**context_args)
|
371
|
-
|
372
|
-
except ImportError as e:
|
373
|
-
console.print(f"[red]❌ RDS snapshots discovery module not available: {e}[/red]")
|
374
|
-
raise click.ClickException("RDS snapshots discovery functionality not available")
|
375
|
-
except Exception as e:
|
376
|
-
console.print(f"[red]❌ RDS snapshots discovery failed: {e}[/red]")
|
377
|
-
raise click.ClickException(str(e))
|
327
|
+
# NOTE: rds-snapshots command removed in v1.1.6 (Bug #2 fix: phantom command elimination)
|
328
|
+
# Reason: Module rds_snapshots_discovery.py doesn't exist (was never implemented)
|
329
|
+
# Future work: Implement proper RDS snapshots discovery in v1.2.0
|
330
|
+
# See: artifacts/future-work/rds-snapshots-discovery-v1.2.0.md
|
378
331
|
|
379
332
|
return inventory
|
@@ -85,18 +85,12 @@ except ImportError:
|
|
85
85
|
# Fallback implementation if FinOps not available
|
86
86
|
FINOPS_INTEGRATION_AVAILABLE = False
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
class AccuracyLevel(Enum):
|
96
|
-
ENTERPRISE = 99.99
|
97
|
-
BUSINESS = 99.50
|
98
|
-
OPERATIONAL = 95.00
|
99
|
-
DEVELOPMENT = 90.00
|
88
|
+
# Import ValidationResult from mcp_validator which is the source of truth
|
89
|
+
from ..finops.mcp_validator import ValidationResult, ValidationStatus, AccuracyLevel
|
90
|
+
|
91
|
+
# Define AccuracyCrossValidator as None for compatibility
|
92
|
+
AccuracyCrossValidator = None
|
93
|
+
CrossValidationReport = None
|
100
94
|
|
101
95
|
|
102
96
|
T = TypeVar("T")
|
@@ -193,3 +193,64 @@ def all_standard_options(f: Callable) -> Callable:
|
|
193
193
|
return f(*args, **kwargs)
|
194
194
|
|
195
195
|
return wrapper
|
196
|
+
|
197
|
+
|
198
|
+
def common_multi_account_options(f: Callable) -> Callable:
|
199
|
+
"""
|
200
|
+
Multi-account and multi-region AWS options for enterprise operations.
|
201
|
+
|
202
|
+
Provides:
|
203
|
+
- --all-profiles: Process all configured AWS profiles (multi-account)
|
204
|
+
- --profiles: [LEGACY] Specific profiles (use --all-profiles for all)
|
205
|
+
- --regions: Specific AWS regions (space-separated)
|
206
|
+
- --all-regions: Process all enabled AWS regions
|
207
|
+
|
208
|
+
Note: --profile is provided by common_aws_options decorator
|
209
|
+
|
210
|
+
Usage:
|
211
|
+
@common_multi_account_options
|
212
|
+
@common_aws_options
|
213
|
+
@click.command()
|
214
|
+
def my_command(profile, all_profiles, profiles, regions, all_regions, **kwargs):
|
215
|
+
# Multi-account command logic
|
216
|
+
"""
|
217
|
+
|
218
|
+
@click.option('--all-profiles', is_flag=True, default=False,
|
219
|
+
help='Process all configured AWS profiles (multi-account)')
|
220
|
+
@click.option('--profiles', type=str, multiple=True,
|
221
|
+
help='[LEGACY] Specific profiles (use --all-profiles for all)')
|
222
|
+
@click.option('--regions', type=str, multiple=True,
|
223
|
+
help='Specific AWS regions (space-separated)')
|
224
|
+
@click.option('--all-regions', is_flag=True, default=False,
|
225
|
+
help='Process all enabled AWS regions')
|
226
|
+
@wraps(f)
|
227
|
+
def wrapper(*args, **kwargs):
|
228
|
+
return f(*args, **kwargs)
|
229
|
+
|
230
|
+
return wrapper
|
231
|
+
|
232
|
+
|
233
|
+
def common_filter_options(f: Callable) -> Callable:
|
234
|
+
"""
|
235
|
+
Common filtering options for resource discovery.
|
236
|
+
|
237
|
+
Provides:
|
238
|
+
- --tags: Filter by tags (key=value format)
|
239
|
+
- --accounts: Filter by specific account IDs
|
240
|
+
|
241
|
+
Usage:
|
242
|
+
@common_filter_options
|
243
|
+
@click.command()
|
244
|
+
def my_command(tags, accounts, **kwargs):
|
245
|
+
# Filtering logic
|
246
|
+
"""
|
247
|
+
|
248
|
+
@click.option('--tags', type=str, multiple=True,
|
249
|
+
help='Filter by tags (key=value format)')
|
250
|
+
@click.option('--accounts', type=str, multiple=True,
|
251
|
+
help='Filter by specific account IDs')
|
252
|
+
@wraps(f)
|
253
|
+
def wrapper(*args, **kwargs):
|
254
|
+
return f(*args, **kwargs)
|
255
|
+
|
256
|
+
return wrapper
|
@@ -457,6 +457,9 @@ class EnterpriseMCPIntegrator:
|
|
457
457
|
|
458
458
|
ec2_client = ops_session.client("ec2")
|
459
459
|
|
460
|
+
# Track validation results for accuracy calculation
|
461
|
+
validation_results = []
|
462
|
+
|
460
463
|
with Progress(
|
461
464
|
SpinnerColumn(),
|
462
465
|
TextColumn("[progress.description]{task.description}"),
|
@@ -468,10 +471,12 @@ class EnterpriseMCPIntegrator:
|
|
468
471
|
task = progress.add_task("Cross-validating VPC data with AWS APIs...", total=100)
|
469
472
|
|
470
473
|
# Cross-validate VPC discovery
|
471
|
-
await self._validate_vpc_discovery(ec2_client, vpc_data, progress, task)
|
474
|
+
vpc_discovery_result = await self._validate_vpc_discovery(ec2_client, vpc_data, progress, task)
|
475
|
+
validation_results.append(vpc_discovery_result)
|
472
476
|
|
473
477
|
# Validate VPC dependencies (ENIs, subnets, etc.)
|
474
|
-
await self._validate_vpc_dependencies(ec2_client, vpc_data, progress, task)
|
478
|
+
vpc_dependency_result = await self._validate_vpc_dependencies(ec2_client, vpc_data, progress, task)
|
479
|
+
validation_results.append(vpc_dependency_result)
|
475
480
|
|
476
481
|
# Validate cost data if available
|
477
482
|
if "cost_data" in vpc_data:
|
@@ -482,19 +487,27 @@ class EnterpriseMCPIntegrator:
|
|
482
487
|
|
483
488
|
progress.update(task, completed=100)
|
484
489
|
|
485
|
-
|
486
|
-
|
490
|
+
# Calculate real accuracy from validation results
|
491
|
+
total_validations = sum(r["total"] for r in validation_results)
|
492
|
+
successful_validations = sum(r["validated"] for r in validation_results)
|
493
|
+
calculated_accuracy = (successful_validations / total_validations * 100) if total_validations > 0 else 0.0
|
494
|
+
|
495
|
+
result.success = calculated_accuracy >= 99.5 # Success only if meets threshold
|
496
|
+
result.accuracy_score = calculated_accuracy # Real calculated value, not hardcoded
|
487
497
|
result.total_resources_validated = len(vpc_data.get("vpc_candidates", []))
|
488
498
|
result.performance_metrics = {
|
489
499
|
"validation_time_seconds": time.time() - start_time,
|
490
500
|
"vpc_discovery_validated": True,
|
491
501
|
"dependency_analysis_validated": True,
|
502
|
+
"total_validations": total_validations,
|
503
|
+
"successful_validations": successful_validations,
|
492
504
|
}
|
493
505
|
|
494
|
-
print_success(f"VPC MCP validation complete: {result.accuracy_score}% accuracy")
|
506
|
+
print_success(f"VPC MCP validation complete: {result.accuracy_score:.1f}% accuracy")
|
495
507
|
|
496
508
|
except Exception as e:
|
497
509
|
result.success = False
|
510
|
+
result.accuracy_score = 0.0 # Honest failure - no optimistic defaults
|
498
511
|
result.error_details = [str(e)]
|
499
512
|
print_error(f"VPC MCP validation failed: {str(e)}")
|
500
513
|
|
@@ -635,7 +648,7 @@ class EnterpriseMCPIntegrator:
|
|
635
648
|
except Exception as e:
|
636
649
|
print_warning(f"Cost validation error: {str(e)[:50]}...")
|
637
650
|
|
638
|
-
async def _validate_vpc_discovery(self, ec2_client, vpc_data: Dict, progress, task) ->
|
651
|
+
async def _validate_vpc_discovery(self, ec2_client, vpc_data: Dict, progress, task) -> Dict[str, Any]:
|
639
652
|
"""Validate VPC discovery against AWS EC2 API."""
|
640
653
|
try:
|
641
654
|
# Get actual VPCs from AWS
|
@@ -663,14 +676,23 @@ class EnterpriseMCPIntegrator:
|
|
663
676
|
|
664
677
|
print_info(f"VPC Discovery Validation: {validated_vpcs} validated out of {vpc_count_match} actual VPCs")
|
665
678
|
|
679
|
+
# Return validation results for accuracy calculation
|
680
|
+
return {
|
681
|
+
"total": vpc_count_match,
|
682
|
+
"validated": validated_vpcs,
|
683
|
+
"accuracy": (validated_vpcs / vpc_count_match * 100) if vpc_count_match > 0 else 0.0
|
684
|
+
}
|
685
|
+
|
666
686
|
except Exception as e:
|
667
687
|
print_warning(f"VPC discovery validation error: {str(e)[:50]}...")
|
688
|
+
return {"total": 0, "validated": 0, "accuracy": 0.0}
|
668
689
|
|
669
|
-
async def _validate_vpc_dependencies(self, ec2_client, vpc_data: Dict, progress, task) ->
|
690
|
+
async def _validate_vpc_dependencies(self, ec2_client, vpc_data: Dict, progress, task) -> Dict[str, Any]:
|
670
691
|
"""Validate VPC dependency counts (ENIs, subnets, etc.)."""
|
671
692
|
try:
|
672
693
|
vpc_candidates = vpc_data.get("vpc_candidates", [])
|
673
694
|
validated_count = 0
|
695
|
+
total_checked = 0
|
674
696
|
|
675
697
|
for candidate in vpc_candidates[:5]: # Sample validation for performance
|
676
698
|
vpc_id = (
|
@@ -680,6 +702,7 @@ class EnterpriseMCPIntegrator:
|
|
680
702
|
)
|
681
703
|
|
682
704
|
if vpc_id:
|
705
|
+
total_checked += 1
|
683
706
|
# Cross-validate ENI count (critical for safety)
|
684
707
|
eni_response = ec2_client.describe_network_interfaces(
|
685
708
|
Filters=[{"Name": "vpc-id", "Values": [vpc_id]}]
|
@@ -697,8 +720,16 @@ class EnterpriseMCPIntegrator:
|
|
697
720
|
|
698
721
|
progress.update(task, advance=30, description=f"Validated dependencies for {validated_count} VPCs...")
|
699
722
|
|
723
|
+
# Return validation results for accuracy calculation
|
724
|
+
return {
|
725
|
+
"total": total_checked,
|
726
|
+
"validated": validated_count,
|
727
|
+
"accuracy": (validated_count / total_checked * 100) if total_checked > 0 else 0.0
|
728
|
+
}
|
729
|
+
|
700
730
|
except Exception as e:
|
701
731
|
print_warning(f"VPC dependency validation error: {str(e)[:50]}...")
|
732
|
+
return {"total": 0, "validated": 0, "accuracy": 0.0}
|
702
733
|
|
703
734
|
async def _validate_vpc_cost_data(self, cost_client, vpc_data: Dict, progress, task) -> None:
|
704
735
|
"""Validate VPC cost data using Cost Explorer API."""
|