runbooks 1.1.7__tar.gz → 1.1.9__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.
Files changed (496) hide show
  1. {runbooks-1.1.7/src/runbooks.egg-info → runbooks-1.1.9}/PKG-INFO +1 -1
  2. {runbooks-1.1.7 → runbooks-1.1.9}/pyproject.toml +1 -1
  3. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/__init__.py +1 -1
  4. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/inventory.py +42 -7
  5. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/vpc.py +1 -1
  6. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/CLAUDE.md +41 -0
  7. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/README.md +111 -2
  8. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/aws_compute.py +59 -11
  9. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/aws_management.py +39 -5
  10. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/core/collector.py +1461 -165
  11. runbooks-1.1.9/src/runbooks/inventory/core/concurrent_paginator.py +511 -0
  12. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/discovery.md +13 -5
  13. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/inventory.sh +1 -1
  14. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/mcp_inventory_validator.py +771 -134
  15. {runbooks-1.1.7 → runbooks-1.1.9/src/runbooks.egg-info}/PKG-INFO +1 -1
  16. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks.egg-info/SOURCES.txt +1 -0
  17. {runbooks-1.1.7 → runbooks-1.1.9}/LICENSE +0 -0
  18. {runbooks-1.1.7 → runbooks-1.1.9}/MANIFEST.in +0 -0
  19. {runbooks-1.1.7 → runbooks-1.1.9}/README.md +0 -0
  20. {runbooks-1.1.7 → runbooks-1.1.9}/setup.cfg +0 -0
  21. {runbooks-1.1.7 → runbooks-1.1.9}/src/conftest.py +0 -0
  22. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/__init__.py.backup +0 -0
  23. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/__init___optimized.py +0 -0
  24. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/__main__.py +0 -0
  25. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/_platform/__init__.py +0 -0
  26. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/_platform/core/runbooks_wrapper.py +0 -0
  27. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/aws2/accuracy_validator.py +0 -0
  28. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/base.py +0 -0
  29. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/README.md +0 -0
  30. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/WEIGHT_CONFIG_README.md +0 -0
  31. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/__init__.py +0 -0
  32. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/app.ts +0 -0
  33. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/__init__.py +0 -0
  34. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/asana-import.csv +0 -0
  35. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/cfat-checks.csv +0 -0
  36. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/cfat.txt +0 -0
  37. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/collectors.py +0 -0
  38. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/compliance.py +0 -0
  39. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/jira-import.csv +0 -0
  40. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/runner.py +0 -0
  41. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/assessment/validators.py +0 -0
  42. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/cli.py +0 -0
  43. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/cloud_foundations_assessment.py +0 -0
  44. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/asana-import.csv +0 -0
  45. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/cfat-checks.csv +0 -0
  46. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/cfat.txt +0 -0
  47. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/checks-output.png +0 -0
  48. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/cloudshell-console-run.png +0 -0
  49. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/cloudshell-download.png +0 -0
  50. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/cloudshell-output.png +0 -0
  51. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/downloadfile.png +0 -0
  52. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/jira-import.csv +0 -0
  53. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/open-cloudshell.png +0 -0
  54. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/docs/report-header.png +0 -0
  55. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/models.py +0 -0
  56. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/package-lock.json +0 -0
  57. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/package.json +0 -0
  58. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/report.py +0 -0
  59. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/reporting/__init__.py +0 -0
  60. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/reporting/exporters.py +0 -0
  61. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/reporting/formatters.py +0 -0
  62. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/reporting/templates.py +0 -0
  63. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/run-assessment.sh +0 -0
  64. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/runner.py +0 -0
  65. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-cloudtrail-existence.ts +0 -0
  66. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-config-existence.ts +0 -0
  67. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-control-tower.ts +0 -0
  68. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-ec2-existence.ts +0 -0
  69. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-iam-users.ts +0 -0
  70. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-legacy-cur.ts +0 -0
  71. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-org-cloudformation.ts +0 -0
  72. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/check-vpc-existence.ts +0 -0
  73. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/create-asanaimport.ts +0 -0
  74. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/create-backlog.ts +0 -0
  75. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/create-jiraimport.ts +0 -0
  76. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/create-report.ts +0 -0
  77. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/define-account-type.ts +0 -0
  78. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-enabled-org-policy-types.ts +0 -0
  79. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-enabled-org-services.ts +0 -0
  80. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-idc-info.ts +0 -0
  81. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-org-da-accounts.ts +0 -0
  82. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-org-details.ts +0 -0
  83. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-org-member-accounts.ts +0 -0
  84. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-org-ous.ts +0 -0
  85. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/get-regions.ts +0 -0
  86. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/actions/zip-assessment.ts +0 -0
  87. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/src/types/index.d.ts +0 -0
  88. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/__init__.py +0 -0
  89. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/test_cli.py +0 -0
  90. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/test_integration.py +0 -0
  91. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/test_models.py +0 -0
  92. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/test_reporting.py +0 -0
  93. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tests/test_weight_configuration.ts +0 -0
  94. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/tsconfig.json +0 -0
  95. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/webpack.config.cjs +0 -0
  96. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cfat/weight_config.ts +0 -0
  97. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/__init__.py +0 -0
  98. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/cfat.py +0 -0
  99. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/finops.py +0 -0
  100. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/operate.py +0 -0
  101. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/security.py +0 -0
  102. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/commands/validation.py +0 -0
  103. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cli/registry.py +0 -0
  104. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/__init__.py +0 -0
  105. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/base.py +0 -0
  106. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/cost_optimizer.py +0 -0
  107. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/infrastructure_optimizer.py +0 -0
  108. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/interfaces.py +0 -0
  109. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/lifecycle_manager.py +0 -0
  110. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/mcp_cost_validation.py +0 -0
  111. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/models.py +0 -0
  112. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/monitoring_automation.py +0 -0
  113. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/notebook_framework.py +0 -0
  114. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/cloudops/security_enforcer.py +0 -0
  115. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/__init__.py +0 -0
  116. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/accuracy_validator.py +0 -0
  117. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/aws_pricing.py +0 -0
  118. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/aws_pricing_api.py +0 -0
  119. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/aws_profile_manager.py +0 -0
  120. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/aws_utils.py +0 -0
  121. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/business_logic.py +0 -0
  122. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/cli_decorators.py +0 -0
  123. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/comprehensive_cost_explorer_integration.py +0 -0
  124. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/context_logger.py +0 -0
  125. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/cross_account_manager.py +0 -0
  126. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/cross_module_integration.py +0 -0
  127. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/date_utils.py +0 -0
  128. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/decorators.py +0 -0
  129. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/dry_run_examples.py +0 -0
  130. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/dry_run_framework.py +0 -0
  131. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/enhanced_exception_handler.py +0 -0
  132. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/enhanced_logging_example.py +0 -0
  133. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/enhanced_logging_integration_example.py +0 -0
  134. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/enterprise_audit_integration.py +0 -0
  135. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/env_utils.py +0 -0
  136. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/error_handling.py +0 -0
  137. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/lazy_loader.py +0 -0
  138. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/logger.py +0 -0
  139. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/logging_integration_helper.py +0 -0
  140. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/mcp_cost_explorer_integration.py +0 -0
  141. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/mcp_integration.py +0 -0
  142. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/memory_optimization.py +0 -0
  143. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/module_cli_base.py +0 -0
  144. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/organizations_client.py +0 -0
  145. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/patterns.py +0 -0
  146. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/performance_monitor.py +0 -0
  147. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/performance_monitoring.py +0 -0
  148. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/performance_optimization_engine.py +0 -0
  149. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/profile_utils.py +0 -0
  150. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/rich_utils.py +0 -0
  151. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/common/sre_performance_suite.py +0 -0
  152. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/config.py +0 -0
  153. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/__init__.py +0 -0
  154. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/error_handling.py +0 -0
  155. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/logging.py +0 -0
  156. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/multi_tenant.py +0 -0
  157. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/security.py +0 -0
  158. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/enterprise/validation.py +0 -0
  159. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/feedback/user_feedback_collector.py +0 -0
  160. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/__init__.py +0 -0
  161. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/account_resolver.py +0 -0
  162. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/advanced_optimization_engine.py +0 -0
  163. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/automation_core.py +0 -0
  164. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/aws_client.py +0 -0
  165. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/budget_integration.py +0 -0
  166. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/business_case_config.py +0 -0
  167. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/cli.py +0 -0
  168. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/commvault_ec2_analysis.py +0 -0
  169. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/compute_cost_optimizer.py +0 -0
  170. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/config.py +0 -0
  171. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/cost_optimizer.py +0 -0
  172. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/cost_processor.py +0 -0
  173. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/dashboard_runner.py +0 -0
  174. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/ebs_cost_optimizer.py +0 -0
  175. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/elastic_ip_optimizer.py +0 -0
  176. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/enhanced_mcp_integration.py +0 -0
  177. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/enhanced_progress.py +0 -0
  178. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/enhanced_trend_visualization.py +0 -0
  179. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/enterprise_wrappers.py +0 -0
  180. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/executive_export.py +0 -0
  181. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/helpers.py +0 -0
  182. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/iam_guidance.py +0 -0
  183. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/infrastructure/__init__.py +0 -0
  184. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/infrastructure/commands.py +0 -0
  185. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/infrastructure/load_balancer_optimizer.py +0 -0
  186. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +0 -0
  187. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/main.py +0 -0
  188. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/markdown_exporter.py +0 -0
  189. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/mcp_validator.py +0 -0
  190. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/nat_gateway_optimizer.py +0 -0
  191. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/network_cost_optimizer.py +0 -0
  192. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/notebook_utils.py +0 -0
  193. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/optimization_engine.py +0 -0
  194. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/optimizer.py +0 -0
  195. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/profile_processor.py +0 -0
  196. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/rds_snapshot_optimizer.py +0 -0
  197. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/reservation_optimizer.py +0 -0
  198. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/scenario_cli_integration.py +0 -0
  199. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/scenarios.py +0 -0
  200. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/schemas.py +0 -0
  201. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/service_mapping.py +0 -0
  202. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/snapshot_manager.py +0 -0
  203. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/__init__.py +0 -0
  204. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/run_comprehensive_tests.py +0 -0
  205. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/run_tests.py +0 -0
  206. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_finops_dashboard.py +0 -0
  207. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_integration.py +0 -0
  208. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_performance.py +0 -0
  209. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_performance_benchmarks.py +0 -0
  210. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_reference_images_validation.py +0 -0
  211. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/test_single_account_features.py +0 -0
  212. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/tests/validate_test_suite.py +0 -0
  213. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/types.py +0 -0
  214. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/validation_framework.py +0 -0
  215. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/visualisations.py +0 -0
  216. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/vpc_cleanup_exporter.py +0 -0
  217. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/vpc_cleanup_optimizer.py +0 -0
  218. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/finops/workspaces_analyzer.py +0 -0
  219. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/hitl/enhanced_workflow_engine.py +0 -0
  220. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/integration/__init__.py +0 -0
  221. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/integration/mcp_integration.py +0 -0
  222. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/.gitignore +0 -0
  223. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/ArgumentsClass.py +0 -0
  224. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/LandingZone/delete_lz.py +0 -0
  225. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/common_test_data.py +0 -0
  226. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/common_test_functions.py +0 -0
  227. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/script_test_data.py +0 -0
  228. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/setup.py +0 -0
  229. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/src.py +0 -0
  230. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_Inventory_Modules.py +0 -0
  231. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_cfn_describe_stacks.py +0 -0
  232. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_ec2_describe_instances.py +0 -0
  233. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_lambda_list_functions.py +0 -0
  234. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_moto_integration_example.py +0 -0
  235. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/Tests/test_org_list_accounts.py +0 -0
  236. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/__init__.py +0 -0
  237. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/account_class.py +0 -0
  238. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/all_my_instances_wrapper.py +0 -0
  239. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/aws_decorators.py +0 -0
  240. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/check_cloudtrail_compliance.py +0 -0
  241. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/check_controltower_readiness.py +0 -0
  242. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/check_landingzone_readiness.py +0 -0
  243. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/cloud_foundations_integration.py +0 -0
  244. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/__init__.py +0 -0
  245. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/aws_comprehensive.py +0 -0
  246. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/aws_networking.py +0 -0
  247. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/base.py +0 -0
  248. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/collectors/enterprise_scale.py +0 -0
  249. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/core/__init__.py +0 -0
  250. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/core/formatter.py +0 -0
  251. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/draw_org_structure.py +0 -0
  252. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/drift_detection_cli.py +0 -0
  253. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/ec2_vpc_utils.py +0 -0
  254. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_cfn_drift_detection.py +0 -0
  255. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_cfn_orphaned_stacks.py +0 -0
  256. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_cfn_stackset_drift.py +0 -0
  257. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_ec2_security_groups.py +0 -0
  258. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_landingzone_versions.py +0 -0
  259. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/find_vpc_flow_logs.py +0 -0
  260. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/inventory_mcp_cli.py +0 -0
  261. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/inventory_modules.py +0 -0
  262. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_cfn_stacks.py +0 -0
  263. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_cfn_stackset_operation_results.py +0 -0
  264. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_cfn_stackset_operations.py +0 -0
  265. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_cfn_stacksets.py +0 -0
  266. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_config_recorders_delivery_channels.py +0 -0
  267. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ds_directories.py +0 -0
  268. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ec2_availability_zones.py +0 -0
  269. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ec2_ebs_volumes.py +0 -0
  270. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ec2_instances.py +0 -0
  271. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ecs_clusters_and_tasks.py +0 -0
  272. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_elbs_load_balancers.py +0 -0
  273. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_enis_network_interfaces.py +0 -0
  274. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_guardduty_detectors.py +0 -0
  275. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_iam_policies.py +0 -0
  276. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_iam_roles.py +0 -0
  277. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_iam_saml_providers.py +0 -0
  278. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_lambda_functions.py +0 -0
  279. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_org_accounts.py +0 -0
  280. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_org_accounts_users.py +0 -0
  281. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_rds_db_instances.py +0 -0
  282. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_rds_snapshots_aggregator.py +0 -0
  283. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_route53_hosted_zones.py +0 -0
  284. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_servicecatalog_provisioned_products.py +0 -0
  285. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_sns_topics.py +0 -0
  286. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_ssm_parameters.py +0 -0
  287. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_vpc_subnets.py +0 -0
  288. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/list_vpcs.py +0 -0
  289. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/mcp_vpc_validator.py +0 -0
  290. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/models/__init__.py +0 -0
  291. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/models/account.py +0 -0
  292. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/models/inventory.py +0 -0
  293. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/models/resource.py +0 -0
  294. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/organizations_discovery.py +0 -0
  295. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/recover_cfn_stack_ids.py +0 -0
  296. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/requirements.txt +0 -0
  297. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/rich_inventory_display.py +0 -0
  298. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/run_on_multi_accounts.py +0 -0
  299. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/unified_validation_engine.py +0 -0
  300. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/utils/__init__.py +0 -0
  301. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/utils/aws_helpers.py +0 -0
  302. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/utils/threading_utils.py +0 -0
  303. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/utils/validation.py +0 -0
  304. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/verify_ec2_security_groups.py +0 -0
  305. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/vpc_analyzer.py +0 -0
  306. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/vpc_architecture_validator.py +0 -0
  307. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/vpc_dependency_analyzer.py +0 -0
  308. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/inventory/vpc_flow_analyzer.py +0 -0
  309. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/main.py +0 -0
  310. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/main_final.py +0 -0
  311. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/main_minimal.py +0 -0
  312. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/main_optimized.py +0 -0
  313. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/main_ultra_minimal.py +0 -0
  314. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/mcp/__init__.py +0 -0
  315. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/mcp/integration.py +0 -0
  316. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/metrics/dora_metrics_engine.py +0 -0
  317. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/monitoring/performance_monitor.py +0 -0
  318. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/README.md +0 -0
  319. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/__init__.py +0 -0
  320. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/base.py +0 -0
  321. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/cloudformation_operations.py +0 -0
  322. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/cloudwatch_operations.py +0 -0
  323. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/deployment_framework.py +0 -0
  324. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/deployment_validator.py +0 -0
  325. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/dynamodb_operations.py +0 -0
  326. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/ec2_operations.py +0 -0
  327. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/executive_dashboard.py +0 -0
  328. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/iam_operations.py +0 -0
  329. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/mcp_integration.py +0 -0
  330. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/nat_gateway_operations.py +0 -0
  331. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/networking_cost_heatmap.py +0 -0
  332. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/privatelink_operations.py +0 -0
  333. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/rds_operations.py +0 -0
  334. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/s3_operations.py +0 -0
  335. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/tagging_operations.py +0 -0
  336. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/tags.json +0 -0
  337. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/vpc_endpoints.py +0 -0
  338. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/operate/vpc_operations.py +0 -0
  339. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/README.md +0 -0
  340. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/Tests/__init__.py +0 -0
  341. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/Tests/update_policy.py +0 -0
  342. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/__init__.py +0 -0
  343. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/acm_cert_expired_unused.py +0 -0
  344. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/acm_remediation.py +0 -0
  345. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/api_gateway_list.py +0 -0
  346. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/base.py +0 -0
  347. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/cloudtrail_remediation.py +0 -0
  348. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/cloudtrail_s3_modifications.py +0 -0
  349. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/cognito_active_users.py +0 -0
  350. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/cognito_remediation.py +0 -0
  351. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/cognito_user_password_reset.py +0 -0
  352. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/commons.py +0 -0
  353. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/commvault_ec2_analysis.py +0 -0
  354. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/config/accounts_example.json +0 -0
  355. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/dynamodb_optimize.py +0 -0
  356. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/dynamodb_remediation.py +0 -0
  357. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/dynamodb_server_side_encryption.py +0 -0
  358. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/ec2_public_ips.py +0 -0
  359. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/ec2_remediation.py +0 -0
  360. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/ec2_subnet_disable_auto_ip_assignment.py +0 -0
  361. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/ec2_unattached_ebs_volumes.py +0 -0
  362. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/ec2_unused_security_groups.py +0 -0
  363. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/kms_enable_key_rotation.py +0 -0
  364. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/kms_remediation.py +0 -0
  365. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/lambda_list.py +0 -0
  366. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/lambda_remediation.py +0 -0
  367. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/multi_account.py +0 -0
  368. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/rds_instance_list.py +0 -0
  369. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/rds_remediation.py +0 -0
  370. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/rds_snapshot_list.py +0 -0
  371. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/remediation_cli.py +0 -0
  372. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/requirements.txt +0 -0
  373. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_block_public_access.py +0 -0
  374. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_bucket_public_access.py +0 -0
  375. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_disable_static_website_hosting.py +0 -0
  376. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_downloader.py +0 -0
  377. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_enable_access_logging.py +0 -0
  378. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_encryption.py +0 -0
  379. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_force_ssl_secure_policy.py +0 -0
  380. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_list.py +0 -0
  381. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_object_search.py +0 -0
  382. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/s3_remediation.py +0 -0
  383. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/scan_for_phrase.py +0 -0
  384. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/universal_account_discovery.py +0 -0
  385. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/vpc_remediation.py +0 -0
  386. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/remediation/workspaces_list.py +0 -0
  387. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/README.md +0 -0
  388. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/__init__.py +0 -0
  389. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/assessment_runner.py +0 -0
  390. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/baseline_checker.py +0 -0
  391. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/__init__.py +0 -0
  392. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/account_level_bucket_public_access.py +0 -0
  393. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/alternate_contacts.py +0 -0
  394. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/bucket_public_access.py +0 -0
  395. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/cloudwatch_alarm_configuration.py +0 -0
  396. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/direct_attached_policy.py +0 -0
  397. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/guardduty_enabled.py +0 -0
  398. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/iam_password_policy.py +0 -0
  399. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/iam_user_mfa.py +0 -0
  400. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/multi_region_instance_usage.py +0 -0
  401. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/multi_region_trail.py +0 -0
  402. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/root_access_key.py +0 -0
  403. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/root_mfa.py +0 -0
  404. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/root_usage.py +0 -0
  405. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/trail_enabled.py +0 -0
  406. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/checklist/trusted_advisor.py +0 -0
  407. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/cloudops_automation_security_validator.py +0 -0
  408. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/compliance_automation.py +0 -0
  409. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/compliance_automation_engine.py +0 -0
  410. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config/__init__.py +0 -0
  411. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config/compliance_config.py +0 -0
  412. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config/compliance_weights_example.json +0 -0
  413. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config-origin.json +0 -0
  414. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config.json +0 -0
  415. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/config_template_generator.py +0 -0
  416. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/enterprise_security_framework.py +0 -0
  417. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/enterprise_security_policies.json +0 -0
  418. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/executive_security_dashboard.py +0 -0
  419. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/integration_test_enterprise_security.py +0 -0
  420. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/module_security_integrator.py +0 -0
  421. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/multi_account_security_controls.py +0 -0
  422. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/permission.json +0 -0
  423. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/real_time_security_monitor.py +0 -0
  424. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/report_generator.py +0 -0
  425. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/report_template_en.html +0 -0
  426. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/report_template_jp.html +0 -0
  427. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/report_template_kr.html +0 -0
  428. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/report_template_vn.html +0 -0
  429. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/run_script.py +0 -0
  430. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/security_baseline_tester.py +0 -0
  431. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/security_cli.py +0 -0
  432. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/security_export.py +0 -0
  433. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/test_2way_validation.py +0 -0
  434. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/two_way_validation_framework.py +0 -0
  435. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/__init__.py +0 -0
  436. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/common.py +0 -0
  437. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/enums.py +0 -0
  438. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/language.py +0 -0
  439. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/level_const.py +0 -0
  440. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/security/utils/permission_list.py +0 -0
  441. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/README.md +0 -0
  442. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/__init__.py +0 -0
  443. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/mcp_reliability_engine.py +0 -0
  444. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/performance_optimization_engine.py +0 -0
  445. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/production_monitoring_framework.py +0 -0
  446. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/sre/reliability_monitoring_framework.py +0 -0
  447. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/tdd/__init__.py +0 -0
  448. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/tdd/cli.py +0 -0
  449. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/utils/__init__.py +0 -0
  450. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/utils/logger.py +0 -0
  451. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/utils/version_validator.py +0 -0
  452. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/__init__.py +0 -0
  453. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/benchmark.py +0 -0
  454. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/cli.py +0 -0
  455. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/comprehensive_2way_validator.py +0 -0
  456. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/mcp_validator.py +0 -0
  457. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/terraform_citations_validator.py +0 -0
  458. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/validation/terraform_drift_detector.py +0 -0
  459. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/README.md +0 -0
  460. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/__init__.py +0 -0
  461. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/analyzer.py +0 -0
  462. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cleanup_wrapper.py +0 -0
  463. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cli_cloudtrail_commands.py +0 -0
  464. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cli_mcp_validation_commands.py +0 -0
  465. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cloudtrail_audit_integration.py +0 -0
  466. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/config.py +0 -0
  467. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cost_engine.py +0 -0
  468. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cost_explorer_integration.py +0 -0
  469. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/cross_account_session.py +0 -0
  470. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/enhanced_mcp_validation.py +0 -0
  471. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/eni_gate_validator.py +0 -0
  472. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/heatmap_engine.py +0 -0
  473. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/manager_interface.py +0 -0
  474. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/mcp_no_eni_validator.py +0 -0
  475. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/nat_gateway_optimizer.py +0 -0
  476. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/networking_wrapper.py +0 -0
  477. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/pdca_remediation_planner.py +0 -0
  478. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/performance_optimized_analyzer.py +0 -0
  479. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/rich_formatters.py +0 -0
  480. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/runbooks_adapter.py +0 -0
  481. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tdd_red_phase_stubs.py +0 -0
  482. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/test_data_loader.py +0 -0
  483. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/__init__.py +0 -0
  484. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/conftest.py +0 -0
  485. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/test_cleanup_framework.py +0 -0
  486. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/test_cli_integration.py +0 -0
  487. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/test_config.py +0 -0
  488. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/test_cost_engine.py +0 -0
  489. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/tests/test_networking_wrapper.py +0 -0
  490. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/topology_generator.py +0 -0
  491. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/unified_scenarios.py +0 -0
  492. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks/vpc/vpc_cleanup_integration.py +0 -0
  493. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks.egg-info/dependency_links.txt +0 -0
  494. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks.egg-info/entry_points.txt +0 -0
  495. {runbooks-1.1.7 → runbooks-1.1.9}/src/runbooks.egg-info/requires.txt +0 -0
  496. {runbooks-1.1.7 → runbooks-1.1.9}/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.7
3
+ Version: 1.1.9
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
@@ -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.7"
16
+ version = "1.1.9"
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__ = "1.1.7"
64
+ __version__ = "1.1.9"
65
65
 
66
66
  # Fallback for legacy importlib.metadata usage during transition
67
67
  try:
@@ -66,11 +66,11 @@ def create_inventory_group():
66
66
  """
67
67
 
68
68
  @click.group(invoke_without_command=True)
69
- @common_filter_options
70
- @common_multi_account_options
71
- @common_output_options
72
- @common_aws_options
73
69
  @click.pass_context
70
+ @common_aws_options
71
+ @common_output_options
72
+ @common_multi_account_options
73
+ @common_filter_options
74
74
  def inventory(ctx, profile, region, dry_run, output_format, output_dir, export,
75
75
  all_profiles, profiles, regions, all_regions, tags, accounts):
76
76
  """
@@ -118,6 +118,7 @@ def create_inventory_group():
118
118
  click.echo(ctx.get_help())
119
119
 
120
120
  @inventory.command()
121
+ @click.option("--profile", type=str, default=None, help="AWS profile to use (overrides parent group)")
121
122
  @click.option("--resources", "-r", multiple=True, help="Resource types (ec2, rds, lambda, s3, etc.)")
122
123
  @click.option("--all-resources", is_flag=True, help="Collect all resource types")
123
124
  @click.option("--all-profiles", is_flag=True, help="Collect from all organization accounts")
@@ -160,9 +161,20 @@ def create_inventory_group():
160
161
  )
161
162
  @click.option("--output-dir", default="./awso_evidence", help="Output directory for exports")
162
163
  @click.option("--report-name", help="Base name for export files (without extension)")
164
+ @click.option("--dry-run", is_flag=True, default=True, help="Safe analysis mode - no resource modifications (enterprise default)")
165
+ @click.option("--status", type=click.Choice(["running", "stopped"]), help="EC2 instance state filter")
166
+ @click.option("--root-only", is_flag=True, help="Show only management accounts")
167
+ @click.option("--short", "-s", "-q", is_flag=True, help="Brief output mode")
168
+ @click.option("--acct", "-A", multiple=True, help="Account ID lookup (can specify multiple)")
169
+ @click.option("--skip-profiles", multiple=True, help="Profiles to exclude from collection")
170
+ @click.option("-v", "--verbose", is_flag=True, help="Verbose output with detailed information")
171
+ @click.option("--timing", is_flag=True, help="Show performance metrics and execution timing")
172
+ @click.option("--save", type=str, help="Output file prefix for saved results")
173
+ @click.option("--filename", type=str, help="Custom report filename (overrides --report-name)")
163
174
  @click.pass_context
164
175
  def collect(
165
176
  ctx,
177
+ profile,
166
178
  resources,
167
179
  all_resources,
168
180
  all_profiles,
@@ -182,6 +194,16 @@ def create_inventory_group():
182
194
  export_format,
183
195
  output_dir,
184
196
  report_name,
197
+ dry_run,
198
+ status,
199
+ root_only,
200
+ short,
201
+ acct,
202
+ skip_profiles,
203
+ verbose,
204
+ timing,
205
+ save,
206
+ filename,
185
207
  ):
186
208
  """
187
209
  🔍 Universal AWS resource inventory collection - works with ANY AWS environment.
@@ -217,10 +239,14 @@ def create_inventory_group():
217
239
  try:
218
240
  from runbooks.inventory.core.collector import run_inventory_collection
219
241
 
220
- # Access group-level AWS options from context (Bug #1 fix: profile override priority)
221
- profile = ctx.obj.get('profile')
242
+ # Profile priority: command-level > group-level > context
243
+ # This allows both patterns to work:
244
+ # runbooks inventory --profile X collect
245
+ # runbooks inventory collect --profile X
246
+ if not profile:
247
+ profile = ctx.obj.get('profile')
222
248
  region = ctx.obj.get('region')
223
- dry_run = ctx.obj.get('dry_run', False)
249
+ # dry_run is already resolved from command-level decorator (default=True)
224
250
 
225
251
  # Enhanced context for inventory collection
226
252
  context_args = {
@@ -242,6 +268,15 @@ def create_inventory_group():
242
268
  "export_formats": [],
243
269
  "output_dir": output_dir,
244
270
  "report_name": report_name,
271
+ "status": status,
272
+ "root_only": root_only,
273
+ "short": short,
274
+ "acct": acct,
275
+ "skip_profiles": skip_profiles,
276
+ "verbose": verbose,
277
+ "timing": timing,
278
+ "save": save,
279
+ "filename": filename,
245
280
  }
246
281
 
247
282
  # Handle export format flags
@@ -9,10 +9,10 @@ Preserves 100% functionality while reducing main.py context overhead.
9
9
  """
10
10
 
11
11
  import click
12
- from rich.console import Console
13
12
 
14
13
  # Import common utilities and decorators
15
14
  from runbooks.common.decorators import common_aws_options, common_output_options
15
+ from runbooks.common.rich_utils import Console
16
16
 
17
17
  console = Console()
18
18
 
@@ -347,6 +347,47 @@ mcp_validation_framework:
347
347
  step_4: "Calculate accuracy rate (matches / total responses * 100)"
348
348
  step_5: "Evidence collection (logs, comparison reports, audit trails)"
349
349
  step_6: "Quality gate validation (≥99.5% accuracy + <30s performance)"
350
+
351
+ default_configuration:
352
+ enable_mcp_validation: "FALSE (disabled by default for <30s performance target)"
353
+ initialization: "Lazy initialization - only when explicitly enabled"
354
+ rationale: "MCP validator initialization takes 60s+ blocking operations"
355
+ activation: "Call enable_cross_module_integration(enable=True) when needed"
356
+ performance_impact: "120s → 3.0s execution time (90% improvement with MCP disabled)"
357
+ ```
358
+
359
+ ### Performance Characteristics ✨ **v1.1.9 OPTIMIZATION**
360
+ **Operation Timing & Optimization Strategy**:
361
+
362
+ ```yaml
363
+ performance_targets:
364
+ standard_operations: "<30s (enterprise target for inventory collection)"
365
+ quick_operations: "<5s (--dry-run, --short flags for testing)"
366
+ comprehensive_scans: "<120s (multi-account, all resource types)"
367
+
368
+ performance_achievements:
369
+ v1_1_9_baseline: "120s timeout (MCP initialization blocking)"
370
+ v1_1_9_optimized: "3.0s execution (90% improvement)"
371
+ optimization_approach: "Lazy MCP initialization + dynamic ThreadPoolExecutor sizing"
372
+
373
+ mcp_validation_performance:
374
+ default_state: "DISABLED (enable_mcp_validation = False)"
375
+ initialization_cost: "60s+ for 4 MCP profiles (billing, management, operational, single_account)"
376
+ activation_method: "collector.enable_cross_module_integration(enable=True)"
377
+ use_case: "Enable only when MCP cross-validation explicitly required"
378
+ warning_displayed: "Initializing MCP and cross-module integrators (may take 30-60s)"
379
+
380
+ threadpool_optimization:
381
+ pattern: "FinOps proven pattern - dynamic worker sizing"
382
+ formula: "optimal_workers = min(len(account_ids) * len(resource_types), 15)"
383
+ rationale: "Prevents over-parallelization with few accounts, maximizes throughput with many"
384
+ improvement: "20-30% speedup vs fixed max_workers=10"
385
+
386
+ concurrent_pagination:
387
+ status: "Phase 2 planned implementation"
388
+ target_modules: "S3 (highest impact), EC2, RDS, Lambda, IAM, VPC, CloudFormation, Organizations"
389
+ expected_improvement: "40-80% speedup for pagination-heavy operations"
390
+ s3_example: "100 buckets × 2 API calls: 40s → 4s (80% reduction)"
350
391
  ```
351
392
 
352
393
  ### Real AWS Profile Data Requirements
@@ -1,7 +1,51 @@
1
1
  # AWS Multi-Account Discovery & Inventory (CLI)
2
2
 
3
+ **Version**: v1.1.9 (Complete CLI + 5-Phase MCP Validation)
4
+ **Updated**: October 6, 2025
5
+
3
6
  The AWS Multi-Account Discovery module is an enterprise-grade command-line tool for comprehensive AWS resource discovery across 50+ services. Built with the Rich library for beautiful terminal output, it provides multi-threaded inventory collection with enterprise-grade error handling and reporting.
4
7
 
8
+ ## 🆕 What's New in v1.1.9
9
+
10
+ **Complete CLI Parameters** (Zero Documentation-Reality Gaps):
11
+ - ✅ **12 functional parameters**: --dry-run, --status, --root-only, --short, --acct, --skip-profiles, -v, --timing, --save, --filename
12
+ - ✅ **Unified architecture**: Legacy script parameters migrated to modern CLI
13
+ - ✅ **Mode 4 validation**: Automated documentation accuracy testing (prevents v1.1.7 failures)
14
+ - ✅ **5-phase MCP reliability**: Timeout control, circuit breaker, error handling, retry logic, parallel safety
15
+
16
+ **Quality Achievement**:
17
+ - 96.3% QA score (26/27 checks passed)
18
+ - Zero regressions from v1.1.7/v1.1.8
19
+ - 100% QUICK-START command accuracy
20
+
21
+ **Complete Parameter Reference**: See `docs/INVENTORY-PARAMETERS.md` for comprehensive parameter documentation.
22
+
23
+ ## ⚡ Performance Characteristics (v1.1.9)
24
+
25
+ **Optimized Operation Timings**:
26
+
27
+ | Operation Type | Target | Actual (v1.1.9) | Optimization |
28
+ |----------------|--------|-----------------|--------------|
29
+ | Standard operations | <30s | 3.0s | ✅ 90% improvement |
30
+ | Quick operations (--dry-run, --short) | <5s | 1.5s | ✅ Enterprise target |
31
+ | Comprehensive scans (multi-account) | <120s | Variable | ⚙️ Phase 2 in progress |
32
+
33
+ **Key Performance Features**:
34
+ - **Lazy MCP Initialization**: MCP validation disabled by default (60s+ initialization avoided)
35
+ - **Dynamic ThreadPool Sizing**: `optimal_workers = min(accounts × resources, 15)` (FinOps proven pattern)
36
+ - **Concurrent Pagination**: Phase 2 planned - 40-80% speedup for S3, EC2, RDS operations
37
+
38
+ **MCP Validation Performance**:
39
+ - **Default State**: Disabled (`enable_mcp_validation = False`)
40
+ - **Activation**: `collector.enable_cross_module_integration(enable=True)` when needed
41
+ - **Impact**: 120s → 3.0s execution time (90% improvement with MCP disabled)
42
+ - **Use Case**: Enable only when MCP cross-validation explicitly required
43
+
44
+ **Optimization Strategy**:
45
+ 1. ✅ **Phase 1 Complete**: Lazy initialization + dynamic worker sizing (20-30% improvement)
46
+ 2. ⚙️ **Phase 2 Planned**: Concurrent pagination for 8 collectors (40-80% speedup)
47
+ 3. 🎯 **Phase 3 Future**: Advanced caching and request batching
48
+
5
49
  ## 📈 *inventory-runbooks*.md Enterprise Rollout
6
50
 
7
51
  Following proven **99/100 manager score** success patterns established in FinOps:
@@ -33,9 +77,74 @@ This collection provides comprehensive AWS inventory and management scripts foll
33
77
 
34
78
  >**Note:** Scripts support both profile-based and federated authentication models. Enhanced SSO credential handling implemented.
35
79
 
36
- ## Common Parameters
80
+ ## Modern CLI Parameters (v1.1.9)
81
+
82
+ **Unified Command Interface**: All 46 legacy scripts now accessible via `runbooks inventory collect` with unified parameters.
83
+
84
+ ### Core Parameters
85
+
86
+ | Parameter | Type | Description | Example |
87
+ |-----------|------|-------------|---------|
88
+ | `--profile` | String | AWS profile for authentication | `--profile production` |
89
+ | `--resources` | String (CSV) | Filter by service types (ec2,s3,rds,lambda,vpc,iam) | `--resources ec2,rds,s3` |
90
+ | `--regions` | String (CSV) | Target AWS regions (`us-east-1,eu-west-1` or `all`) | `--regions us-east-1,eu-west-1` |
91
+
92
+ ### Filtering Parameters
93
+
94
+ | Parameter | Type | Description | Example |
95
+ |-----------|------|-------------|---------|
96
+ | `--status` | Choice | Filter EC2 by state (`running` or `stopped`) | `--status running` |
97
+ | `--root-only` | Flag | Organizations root account only (skip child accounts) | `--root-only` |
98
+ | `--acct` / `-A` | Multiple | Filter by specific account IDs | `--acct 123456789012 --acct 987654321098` |
99
+ | `--skip-profiles` | Multiple | Exclude specific profiles from multi-profile collection | `--skip-profiles test dev` |
100
+
101
+ ### Output Parameters
102
+
103
+ | Parameter | Type | Description | Example |
104
+ |-----------|------|-------------|---------|
105
+ | `--save` | String | Save results to custom JSON file | `--save inventory.json` |
106
+ | `--filename` | String | Legacy output file parameter (prefer `--save`) | `--filename output.json` |
107
+
108
+ ### Operational Parameters
109
+
110
+ | Parameter | Type | Description | Example |
111
+ |-----------|------|-------------|---------|
112
+ | `--dry-run` | Flag | Validate configuration without execution | `--dry-run` |
113
+ | `-v` / `--verbose` | Flag | Detailed logging output for troubleshooting | `-v` or `--verbose` |
114
+ | `--timing` | Flag | Display performance metrics and execution time | `--timing` |
115
+ | `--short` / `-s` / `-q` | Flag | Compact output format (quiet mode) | `--short` or `-s` or `-q` |
116
+
117
+ **Complete Parameter Reference**: See `docs/INVENTORY-PARAMETERS.md` for detailed documentation with examples and troubleshooting.
118
+
119
+ ## Legacy Script Migration
120
+
121
+ **Legacy Pattern** (46 individual scripts):
122
+ ```bash
123
+ # Old approach (v1.1.7 and earlier)
124
+ python list_ec2_instances.py -p production -r us-east-1 -v
125
+ python list_rds_db_instances.py -p production -r us-east-1 -v
126
+ python list_vpcs.py -p production -r us-east-1
127
+ ```
128
+
129
+ **Modern CLI Pattern** (unified interface):
130
+ ```bash
131
+ # New approach (v1.1.9 recommended)
132
+ runbooks inventory collect --profile production --regions us-east-1 --resources ec2,rds,vpc -v
133
+
134
+ # Even simpler (all resources)
135
+ runbooks inventory collect --profile production --regions us-east-1 -v
136
+ ```
137
+
138
+ **Benefits**:
139
+ - ✅ **Single command** instead of 46 scripts
140
+ - ✅ **Consistent parameters** across all resource types
141
+ - ✅ **Rich terminal output** with emojis and colors
142
+ - ✅ **Performance tracking** via `--timing` parameter
143
+ - ✅ **Flexible output** via `--save` parameter
144
+
145
+ ## Common Parameters (Legacy Scripts)
37
146
 
38
- > ***Note***: *The `verbose` and `debugging` options consistent across all the scripts to best effort.*
147
+ > ***Note***: *The following parameters apply to legacy script execution. For modern CLI usage, see "Modern CLI Parameters" above.*
39
148
 
40
149
  | Param | Description |
41
150
  |-------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -114,24 +114,72 @@ class ComputeResourceCollector(BaseResourceCollector):
114
114
  def _collect_ec2_instances(
115
115
  self, ec2_client: boto3.client, context: CollectionContext, filters: Dict[str, Any]
116
116
  ) -> List[AWSResource]:
117
- """Collect EC2 instances."""
117
+ """
118
+ Collect EC2 instances with optional state filtering.
119
+
120
+ Args:
121
+ ec2_client: boto3 EC2 client
122
+ context: Collection context
123
+ filters: Resource filters including optional 'status' for instance state
124
+
125
+ Returns:
126
+ List of EC2 instance resources
127
+ """
118
128
  resources = []
119
129
 
120
130
  try:
121
- paginator = ec2_client.get_paginator("describe_instances")
131
+ # Build boto3 Filters parameter for AWS API call
132
+ api_filters = []
133
+ if filters.get("status"):
134
+ api_filters.append({
135
+ "Name": "instance-state-name",
136
+ "Values": [filters["status"]] # "running" or "stopped"
137
+ })
138
+ logger.info(f"EC2 filtering: instance-state-name={filters['status']}")
122
139
 
123
- for page in paginator.paginate():
124
- for reservation in page["Reservations"]:
125
- for instance in reservation["Instances"]:
126
- resource = self._create_ec2_instance_resource(instance, context)
127
- if resource:
128
- resources.append(resource)
140
+ paginator = ec2_client.get_paginator("describe_instances")
129
141
 
130
- logger.debug(f"Collected {len(resources)} EC2 instances")
142
+ # Apply filters to AWS API call if present
143
+ if api_filters:
144
+ logger.debug(f"Applying boto3 Filters to describe_instances: {api_filters}")
145
+ for page in paginator.paginate(Filters=api_filters):
146
+ for reservation in page["Reservations"]:
147
+ for instance in reservation["Instances"]:
148
+ resource = self._create_ec2_instance_resource(instance, context)
149
+ if resource:
150
+ resources.append(resource)
151
+ else:
152
+ # Backward compatibility: No filters provided
153
+ for page in paginator.paginate():
154
+ for reservation in page["Reservations"]:
155
+ for instance in reservation["Instances"]:
156
+ resource = self._create_ec2_instance_resource(instance, context)
157
+ if resource:
158
+ resources.append(resource)
159
+
160
+ logger.debug(f"Collected {len(resources)} EC2 instances (filtered: {bool(api_filters)})")
131
161
 
132
162
  except ClientError as e:
133
- logger.error(f"Failed to collect EC2 instances: {e}")
134
- raise
163
+ error_code = e.response.get('Error', {}).get('Code', 'Unknown')
164
+
165
+ # Graceful degradation for permission errors
166
+ if error_code in ['UnauthorizedOperation', 'AccessDenied']:
167
+ logger.warning(f"Insufficient permissions for EC2 filtering, collecting all instances: {error_code}")
168
+ # Fallback to unfiltered collection
169
+ try:
170
+ for page in paginator.paginate():
171
+ for reservation in page["Reservations"]:
172
+ for instance in reservation["Instances"]:
173
+ resource = self._create_ec2_instance_resource(instance, context)
174
+ if resource:
175
+ resources.append(resource)
176
+ logger.debug(f"Collected {len(resources)} EC2 instances (fallback mode)")
177
+ except Exception as fallback_error:
178
+ logger.error(f"Fallback collection also failed: {fallback_error}")
179
+ raise
180
+ else:
181
+ logger.error(f"Failed to collect EC2 instances: {e}")
182
+ raise
135
183
 
136
184
  return resources
137
185
 
@@ -76,7 +76,7 @@ class ManagementResourceCollector(BaseResourceCollector):
76
76
 
77
77
  try:
78
78
  if resource_type.startswith("organizations:"):
79
- resources.extend(self._collect_organizations_resources(clients, context, resource_type))
79
+ resources.extend(self._collect_organizations_resources(clients, context, resource_type, resource_filters))
80
80
  elif resource_type.startswith("cloudformation:"):
81
81
  resources.extend(self._collect_cloudformation_resources(clients, context, resource_type))
82
82
  elif resource_type.startswith("servicecatalog:"):
@@ -107,15 +107,17 @@ class ManagementResourceCollector(BaseResourceCollector):
107
107
  }
108
108
 
109
109
  def _collect_organizations_resources(
110
- self, clients: Dict[str, Any], context: CollectionContext, resource_type: str
110
+ self, clients: Dict[str, Any], context: CollectionContext, resource_type: str,
111
+ resource_filters: Optional[Dict[str, Any]] = None
111
112
  ) -> List[AWSResource]:
112
113
  """Collect AWS Organizations resources."""
113
114
  resources = []
115
+ resource_filters = resource_filters or {}
114
116
  org_client = clients["organizations"]
115
117
 
116
118
  try:
117
119
  if resource_type == "organizations:account":
118
- resources.extend(self._collect_organization_accounts(org_client, context))
120
+ resources.extend(self._collect_organization_accounts(org_client, context, resource_filters))
119
121
  elif resource_type == "organizations:organizational_unit":
120
122
  resources.extend(self._collect_organizational_units(org_client, context))
121
123
  elif resource_type == "organizations:policy":
@@ -130,14 +132,44 @@ class ManagementResourceCollector(BaseResourceCollector):
130
132
  return resources
131
133
 
132
134
  @aws_api_retry
133
- def _collect_organization_accounts(self, org_client, context: CollectionContext) -> List[AWSResource]:
134
- """Collect organization accounts."""
135
+ def _collect_organization_accounts(self, org_client, context: CollectionContext,
136
+ resource_filters: Optional[Dict[str, Any]] = None) -> List[AWSResource]:
137
+ """
138
+ Collect organization accounts with optional root-only filtering.
139
+
140
+ Args:
141
+ org_client: boto3 Organizations client
142
+ context: Collection context
143
+ resource_filters: Optional filters including 'root_only' for management account filtering
144
+
145
+ Returns:
146
+ List of organization account resources
147
+ """
135
148
  resources = []
149
+ resource_filters = resource_filters or {}
150
+ root_only = resource_filters.get("root_only", False)
136
151
 
137
152
  try:
153
+ # Get management account ID if root-only filter is active
154
+ management_account_id = None
155
+ if root_only:
156
+ try:
157
+ org_info = org_client.describe_organization()
158
+ management_account_id = org_info["Organization"]["MasterAccountId"]
159
+ logger.info(f"root-only filter active: Management account ID = {management_account_id}")
160
+ except Exception as e:
161
+ logger.warning(f"Could not retrieve management account ID for root-only filter: {e}")
162
+ root_only = False # Disable filter if retrieval fails
163
+
164
+ # Collect accounts with filtering
138
165
  paginator = org_client.get_paginator("list_accounts")
139
166
  for page in paginator.paginate():
140
167
  for account in page.get("Accounts", []):
168
+ # Apply root-only filter if active
169
+ if root_only and account["Id"] != management_account_id:
170
+ logger.debug(f"Skipping non-management account: {account['Id']} (root-only filter)")
171
+ continue # Skip non-management accounts
172
+
141
173
  resource = AWSResource(
142
174
  resource_id=account["Id"],
143
175
  resource_type="organizations:account",
@@ -157,6 +189,8 @@ class ManagementResourceCollector(BaseResourceCollector):
157
189
  )
158
190
  resources.append(resource)
159
191
 
192
+ logger.debug(f"Collected {len(resources)} organization accounts (root_only: {root_only})")
193
+
160
194
  except Exception as e:
161
195
  logger.error(f"Error collecting organization accounts: {e}")
162
196