runbooks 1.1.3__py3-none-any.whl → 1.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
  2. runbooks/cfat/assessment/compliance.py +7 -7
  3. runbooks/cfat/models.py +6 -2
  4. runbooks/cfat/tests/__init__.py +6 -1
  5. runbooks/cli/__init__.py +13 -0
  6. runbooks/cli/commands/cfat.py +233 -0
  7. runbooks/cli/commands/finops.py +213 -0
  8. runbooks/cli/commands/inventory.py +276 -0
  9. runbooks/cli/commands/operate.py +266 -0
  10. runbooks/cli/commands/security.py +224 -0
  11. runbooks/cli/commands/validation.py +411 -0
  12. runbooks/cli/commands/vpc.py +246 -0
  13. runbooks/cli/registry.py +95 -0
  14. runbooks/cloudops/__init__.py +3 -3
  15. runbooks/cloudops/cost_optimizer.py +6 -6
  16. runbooks/cloudops/interfaces.py +2 -2
  17. runbooks/cloudops/mcp_cost_validation.py +3 -3
  18. runbooks/cloudops/notebook_framework.py +2 -2
  19. runbooks/common/aws_profile_manager.py +337 -0
  20. runbooks/common/aws_utils.py +1 -1
  21. runbooks/common/business_logic.py +3 -3
  22. runbooks/common/comprehensive_cost_explorer_integration.py +1 -1
  23. runbooks/common/cross_account_manager.py +1 -1
  24. runbooks/common/decorators.py +225 -0
  25. runbooks/common/mcp_cost_explorer_integration.py +2 -2
  26. runbooks/common/organizations_client.py +1 -1
  27. runbooks/common/patterns.py +206 -0
  28. runbooks/common/profile_utils.py +149 -14
  29. runbooks/common/rich_utils.py +502 -11
  30. runbooks/finops/README.md +8 -8
  31. runbooks/finops/__init__.py +4 -4
  32. runbooks/finops/business_cases.py +3 -3
  33. runbooks/finops/cost_optimizer.py +4 -4
  34. runbooks/finops/dashboard_router.py +2 -2
  35. runbooks/finops/ebs_cost_optimizer.py +4 -4
  36. runbooks/finops/ebs_optimizer.py +19 -2
  37. runbooks/finops/enhanced_progress.py +8 -8
  38. runbooks/finops/enterprise_wrappers.py +7 -7
  39. runbooks/finops/finops_scenarios.py +11 -11
  40. runbooks/finops/legacy_migration.py +8 -8
  41. runbooks/finops/markdown_exporter.py +2 -2
  42. runbooks/finops/multi_dashboard.py +1 -1
  43. runbooks/finops/nat_gateway_optimizer.py +1 -1
  44. runbooks/finops/optimizer.py +6 -6
  45. runbooks/finops/rds_snapshot_optimizer.py +2 -2
  46. runbooks/finops/scenario_cli_integration.py +13 -13
  47. runbooks/finops/scenarios.py +16 -16
  48. runbooks/finops/single_dashboard.py +10 -10
  49. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  50. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  51. runbooks/finops/tests/test_single_account_features.py +17 -17
  52. runbooks/finops/tests/validate_test_suite.py +1 -1
  53. runbooks/finops/validation_framework.py +5 -5
  54. runbooks/finops/vpc_cleanup_exporter.py +3 -3
  55. runbooks/finops/vpc_cleanup_optimizer.py +2 -2
  56. runbooks/finops/workspaces_analyzer.py +1 -1
  57. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  58. runbooks/inventory/README.md +3 -3
  59. runbooks/inventory/Tests/common_test_data.py +30 -30
  60. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  61. runbooks/inventory/collectors/aws_networking.py +2 -2
  62. runbooks/inventory/discovery.md +2 -2
  63. runbooks/inventory/find_ec2_security_groups.py +1 -1
  64. runbooks/inventory/organizations_discovery.py +1 -1
  65. runbooks/inventory/vpc_analyzer.py +1 -1
  66. runbooks/inventory/vpc_flow_analyzer.py +2 -2
  67. runbooks/main.py +143 -9153
  68. runbooks/metrics/dora_metrics_engine.py +2 -2
  69. runbooks/operate/mcp_integration.py +1 -1
  70. runbooks/operate/networking_cost_heatmap.py +4 -2
  71. runbooks/operate/privatelink_operations.py +1 -1
  72. runbooks/operate/vpc_endpoints.py +1 -1
  73. runbooks/operate/vpc_operations.py +2 -2
  74. runbooks/remediation/commvault_ec2_analysis.py +1 -1
  75. runbooks/remediation/rds_snapshot_list.py +5 -5
  76. runbooks/remediation/workspaces_list.py +5 -5
  77. runbooks/security/integration_test_enterprise_security.py +5 -3
  78. runbooks/security/run_script.py +1 -1
  79. runbooks/sre/mcp_reliability_engine.py +6 -6
  80. runbooks/utils/version_validator.py +1 -1
  81. runbooks/validation/comprehensive_2way_validator.py +9 -4
  82. runbooks/vpc/heatmap_engine.py +7 -4
  83. runbooks/vpc/mcp_no_eni_validator.py +1 -1
  84. runbooks/vpc/unified_scenarios.py +7 -7
  85. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/METADATA +53 -52
  86. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/RECORD +90 -78
  87. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/WHEEL +0 -0
  88. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/entry_points.txt +0 -0
  89. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/licenses/LICENSE +0 -0
  90. {runbooks-1.1.3.dist-info → runbooks-1.1.4.dist-info}/top_level.txt +0 -0
@@ -1086,7 +1086,7 @@ account_and_region_specific_function_response_data = [
1086
1086
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1087
1087
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1088
1088
  "LOG_LEVEL": "INFO",
1089
- "SOLUTION_VERSION": "v1.0.3",
1089
+ "SOLUTION_VERSION": "latest version",
1090
1090
  }
1091
1091
  },
1092
1092
  "TracingConfig": {"Mode": "Active"},
@@ -1119,7 +1119,7 @@ account_and_region_specific_function_response_data = [
1119
1119
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1120
1120
  "COMPONENT_TABLE": "AccountAssessmentStack-TrustedAccessTable495B447A-GTR0RYDUJU5Q",
1121
1121
  "LOG_LEVEL": "INFO",
1122
- "SOLUTION_VERSION": "v1.0.3",
1122
+ "SOLUTION_VERSION": "latest version",
1123
1123
  }
1124
1124
  },
1125
1125
  "TracingConfig": {"Mode": "Active"},
@@ -1190,7 +1190,7 @@ account_and_region_specific_function_response_data = [
1190
1190
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1191
1191
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1192
1192
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1193
- "SOLUTION_VERSION": "v1.0.3",
1193
+ "SOLUTION_VERSION": "latest version",
1194
1194
  }
1195
1195
  },
1196
1196
  "TracingConfig": {"Mode": "Active"},
@@ -1223,7 +1223,7 @@ account_and_region_specific_function_response_data = [
1223
1223
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1224
1224
  "COMPONENT_TABLE": "AccountAssessmentStack-DelegatedAdminsTable29E80916-F34FK4FZGFP5",
1225
1225
  "LOG_LEVEL": "INFO",
1226
- "SOLUTION_VERSION": "v1.0.3",
1226
+ "SOLUTION_VERSION": "latest version",
1227
1227
  }
1228
1228
  },
1229
1229
  "TracingConfig": {"Mode": "Active"},
@@ -1291,7 +1291,7 @@ account_and_region_specific_function_response_data = [
1291
1291
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1292
1292
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1293
1293
  "LOG_LEVEL": "INFO",
1294
- "SOLUTION_VERSION": "v1.0.3",
1294
+ "SOLUTION_VERSION": "latest version",
1295
1295
  }
1296
1296
  },
1297
1297
  "TracingConfig": {"Mode": "Active"},
@@ -1341,7 +1341,7 @@ account_and_region_specific_function_response_data = [
1341
1341
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1342
1342
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1343
1343
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1344
- "SOLUTION_VERSION": "v1.0.3",
1344
+ "SOLUTION_VERSION": "latest version",
1345
1345
  }
1346
1346
  },
1347
1347
  "TracingConfig": {"Mode": "Active"},
@@ -1395,7 +1395,7 @@ account_and_region_specific_function_response_data = [
1395
1395
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1396
1396
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1397
1397
  "LOG_LEVEL": "INFO",
1398
- "SOLUTION_VERSION": "v1.0.3",
1398
+ "SOLUTION_VERSION": "latest version",
1399
1399
  }
1400
1400
  },
1401
1401
  "TracingConfig": {"Mode": "Active"},
@@ -1425,7 +1425,7 @@ account_and_region_specific_function_response_data = [
1425
1425
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1426
1426
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1427
1427
  "LOG_LEVEL": "INFO",
1428
- "SOLUTION_VERSION": "v1.0.3",
1428
+ "SOLUTION_VERSION": "latest version",
1429
1429
  }
1430
1430
  },
1431
1431
  "TracingConfig": {"Mode": "Active"},
@@ -1450,12 +1450,12 @@ account_and_region_specific_function_response_data = [
1450
1450
  "Version": "$LATEST",
1451
1451
  "Environment": {
1452
1452
  "Variables": {
1453
- "CONFIG": '{"SrcBucket":"solutions-us-east-1","SrcPath":"account-assessment-for-aws-organizations/v1.0.3/webui/","WebUIBucket":"accountassessmentstack-s3bucket07682993-1qnr9dfvuvn8m","awsExports":{"API":{"endpoints":[{"name":"AccountAssessmentApi","endpoint":"https://5ugessads8.execute-api.us-east-1.amazonaws.com/prod"}]},"loggingLevel":"INFO","Auth":{"region":"us-east-1","userPoolId":"us-east-1_4y5EH6RX3","userPoolWebClientId":"10hrrgcdjum45c4jmre3kv7r7d","mandatorySignIn":true,"oauth":{"domain":"paulbaye-amzn.auth.us-east-1.amazoncognito.com","scope":["openid","profile","email","aws.cognito.signin.user.admin"],"redirectSignIn":"https://d12i33hlb8s7se.cloudfront.net/","redirectSignOut":"https://d12i33hlb8s7se.cloudfront.net/","responseType":"code","clientId":"10hrrgcdjum45c4jmre3kv7r7d"}}}}',
1453
+ "CONFIG": '{"SrcBucket":"solutions-us-east-1","SrcPath":"account-assessment-for-aws-organizations/latest version/webui/","WebUIBucket":"accountassessmentstack-s3bucket07682993-1qnr9dfvuvn8m","awsExports":{"API":{"endpoints":[{"name":"AccountAssessmentApi","endpoint":"https://5ugessads8.execute-api.us-east-1.amazonaws.com/prod"}]},"loggingLevel":"INFO","Auth":{"region":"us-east-1","userPoolId":"us-east-1_4y5EH6RX3","userPoolWebClientId":"10hrrgcdjum45c4jmre3kv7r7d","mandatorySignIn":true,"oauth":{"domain":"paulbaye-amzn.auth.us-east-1.amazoncognito.com","scope":["openid","profile","email","aws.cognito.signin.user.admin"],"redirectSignIn":"https://d12i33hlb8s7se.cloudfront.net/","redirectSignOut":"https://d12i33hlb8s7se.cloudfront.net/","responseType":"code","clientId":"10hrrgcdjum45c4jmre3kv7r7d"}}}}',
1454
1454
  "POWERTOOLS_SERVICE_NAME": "DeployWebUI",
1455
1455
  "SEND_ANONYMOUS_DATA": "Yes",
1456
1456
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1457
1457
  "LOG_LEVEL": "INFO",
1458
- "SOLUTION_VERSION": "v1.0.3",
1458
+ "SOLUTION_VERSION": "latest version",
1459
1459
  }
1460
1460
  },
1461
1461
  "TracingConfig": {"Mode": "Active"},
@@ -1508,7 +1508,7 @@ account_and_region_specific_function_response_data = [
1508
1508
  "TIME_TO_LIVE_IN_DAYS": "90",
1509
1509
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1510
1510
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1511
- "SOLUTION_VERSION": "v1.0.3",
1511
+ "SOLUTION_VERSION": "latest version",
1512
1512
  "TABLE_RESOURCE_BASED_POLICY": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
1513
1513
  }
1514
1514
  },
@@ -1579,7 +1579,7 @@ account_and_region_specific_function_response_data = [
1579
1579
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1580
1580
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1581
1581
  "COMPONENT_TABLE": "AccountAssessmentStack-TrustedAccessTable495B447A-GTR0RYDUJU5Q",
1582
- "SOLUTION_VERSION": "v1.0.3",
1582
+ "SOLUTION_VERSION": "latest version",
1583
1583
  }
1584
1584
  },
1585
1585
  "TracingConfig": {"Mode": "Active"},
@@ -1609,7 +1609,7 @@ account_and_region_specific_function_response_data = [
1609
1609
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
1610
1610
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
1611
1611
  "COMPONENT_TABLE": "AccountAssessmentStack-DelegatedAdminsTable29E80916-F34FK4FZGFP5",
1612
- "SOLUTION_VERSION": "v1.0.3",
1612
+ "SOLUTION_VERSION": "latest version",
1613
1613
  }
1614
1614
  },
1615
1615
  "TracingConfig": {"Mode": "Active"},
@@ -2043,7 +2043,7 @@ account_and_region_specific_function_response_data = [
2043
2043
  "CONFIG_AGGREGATOR": "aws-perspective-us-east-1-444444444444-aggregator",
2044
2044
  "VERSION": "1.0",
2045
2045
  "ANONYMOUS_METRIC_OPT_OUT": "No",
2046
- "DEPLOYMENT_BUCKET_KEY": "aws-perspective/v1.0.1",
2046
+ "DEPLOYMENT_BUCKET_KEY": "aws-perspective/latest version",
2047
2047
  "DISCOVERY_BUCKET": "aws-perspective-discoverybucket-qjlwypzo5eg1",
2048
2048
  "WEBUI_BUCKET": "aws-perspective-webuibucket-1xylrsdi5wwn2",
2049
2049
  }
@@ -2312,7 +2312,7 @@ function_response_data = {
2312
2312
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2313
2313
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2314
2314
  "LOG_LEVEL": "INFO",
2315
- "SOLUTION_VERSION": "v1.0.3",
2315
+ "SOLUTION_VERSION": "latest version",
2316
2316
  }
2317
2317
  },
2318
2318
  "TracingConfig": {"Mode": "Active"},
@@ -2345,7 +2345,7 @@ function_response_data = {
2345
2345
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2346
2346
  "COMPONENT_TABLE": "AccountAssessmentStack-TrustedAccessTable495B447A-GTR0RYDUJU5Q",
2347
2347
  "LOG_LEVEL": "INFO",
2348
- "SOLUTION_VERSION": "v1.0.3",
2348
+ "SOLUTION_VERSION": "latest version",
2349
2349
  }
2350
2350
  },
2351
2351
  "TracingConfig": {"Mode": "Active"},
@@ -2416,7 +2416,7 @@ function_response_data = {
2416
2416
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2417
2417
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2418
2418
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2419
- "SOLUTION_VERSION": "v1.0.3",
2419
+ "SOLUTION_VERSION": "latest version",
2420
2420
  }
2421
2421
  },
2422
2422
  "TracingConfig": {"Mode": "Active"},
@@ -2449,7 +2449,7 @@ function_response_data = {
2449
2449
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2450
2450
  "COMPONENT_TABLE": "AccountAssessmentStack-DelegatedAdminsTable29E80916-F34FK4FZGFP5",
2451
2451
  "LOG_LEVEL": "INFO",
2452
- "SOLUTION_VERSION": "v1.0.3",
2452
+ "SOLUTION_VERSION": "latest version",
2453
2453
  }
2454
2454
  },
2455
2455
  "TracingConfig": {"Mode": "Active"},
@@ -2514,7 +2514,7 @@ function_response_data = {
2514
2514
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2515
2515
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2516
2516
  "LOG_LEVEL": "INFO",
2517
- "SOLUTION_VERSION": "v1.0.3",
2517
+ "SOLUTION_VERSION": "latest version",
2518
2518
  }
2519
2519
  },
2520
2520
  "TracingConfig": {"Mode": "Active"},
@@ -2564,7 +2564,7 @@ function_response_data = {
2564
2564
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2565
2565
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2566
2566
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2567
- "SOLUTION_VERSION": "v1.0.3",
2567
+ "SOLUTION_VERSION": "latest version",
2568
2568
  }
2569
2569
  },
2570
2570
  "TracingConfig": {"Mode": "Active"},
@@ -2618,7 +2618,7 @@ function_response_data = {
2618
2618
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2619
2619
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2620
2620
  "LOG_LEVEL": "INFO",
2621
- "SOLUTION_VERSION": "v1.0.3",
2621
+ "SOLUTION_VERSION": "latest version",
2622
2622
  }
2623
2623
  },
2624
2624
  "TracingConfig": {"Mode": "Active"},
@@ -2648,7 +2648,7 @@ function_response_data = {
2648
2648
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2649
2649
  "COMPONENT_TABLE": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2650
2650
  "LOG_LEVEL": "INFO",
2651
- "SOLUTION_VERSION": "v1.0.3",
2651
+ "SOLUTION_VERSION": "latest version",
2652
2652
  }
2653
2653
  },
2654
2654
  "TracingConfig": {"Mode": "Active"},
@@ -2673,12 +2673,12 @@ function_response_data = {
2673
2673
  "Version": "$LATEST",
2674
2674
  "Environment": {
2675
2675
  "Variables": {
2676
- "CONFIG": '{"SrcBucket":"solutions-us-east-1","SrcPath":"account-assessment-for-aws-organizations/v1.0.3/webui/","WebUIBucket":"accountassessmentstack-s3bucket07682993-1qnr9dfvuvn8m","awsExports":{"API":{"endpoints":[{"name":"AccountAssessmentApi","endpoint":"https://5ugessads8.execute-api.us-east-1.amazonaws.com/prod"}]},"loggingLevel":"INFO","Auth":{"region":"us-east-1","userPoolId":"us-east-1_4y5EH6RX3","userPoolWebClientId":"10hrrgcdjum45c4jmre3kv7r7d","mandatorySignIn":true,"oauth":{"domain":"paulbaye-amzn.auth.us-east-1.amazoncognito.com","scope":["openid","profile","email","aws.cognito.signin.user.admin"],"redirectSignIn":"https://d12i33hlb8s7se.cloudfront.net/","redirectSignOut":"https://d12i33hlb8s7se.cloudfront.net/","responseType":"code","clientId":"10hrrgcdjum45c4jmre3kv7r7d"}}}}',
2676
+ "CONFIG": '{"SrcBucket":"solutions-us-east-1","SrcPath":"account-assessment-for-aws-organizations/latest version/webui/","WebUIBucket":"accountassessmentstack-s3bucket07682993-1qnr9dfvuvn8m","awsExports":{"API":{"endpoints":[{"name":"AccountAssessmentApi","endpoint":"https://5ugessads8.execute-api.us-east-1.amazonaws.com/prod"}]},"loggingLevel":"INFO","Auth":{"region":"us-east-1","userPoolId":"us-east-1_4y5EH6RX3","userPoolWebClientId":"10hrrgcdjum45c4jmre3kv7r7d","mandatorySignIn":true,"oauth":{"domain":"paulbaye-amzn.auth.us-east-1.amazoncognito.com","scope":["openid","profile","email","aws.cognito.signin.user.admin"],"redirectSignIn":"https://d12i33hlb8s7se.cloudfront.net/","redirectSignOut":"https://d12i33hlb8s7se.cloudfront.net/","responseType":"code","clientId":"10hrrgcdjum45c4jmre3kv7r7d"}}}}',
2677
2677
  "POWERTOOLS_SERVICE_NAME": "DeployWebUI",
2678
2678
  "SEND_ANONYMOUS_DATA": "Yes",
2679
2679
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2680
2680
  "LOG_LEVEL": "INFO",
2681
- "SOLUTION_VERSION": "v1.0.3",
2681
+ "SOLUTION_VERSION": "latest version",
2682
2682
  }
2683
2683
  },
2684
2684
  "TracingConfig": {"Mode": "Active"},
@@ -2731,7 +2731,7 @@ function_response_data = {
2731
2731
  "TIME_TO_LIVE_IN_DAYS": "90",
2732
2732
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2733
2733
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2734
- "SOLUTION_VERSION": "v1.0.3",
2734
+ "SOLUTION_VERSION": "latest version",
2735
2735
  "TABLE_RESOURCE_BASED_POLICY": "AccountAssessmentStack-ResourceBasedPolicyTable7277C643-13R1K510AXFDB",
2736
2736
  }
2737
2737
  },
@@ -2802,7 +2802,7 @@ function_response_data = {
2802
2802
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2803
2803
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2804
2804
  "COMPONENT_TABLE": "AccountAssessmentStack-TrustedAccessTable495B447A-GTR0RYDUJU5Q",
2805
- "SOLUTION_VERSION": "v1.0.3",
2805
+ "SOLUTION_VERSION": "latest version",
2806
2806
  }
2807
2807
  },
2808
2808
  "TracingConfig": {"Mode": "Active"},
@@ -2832,7 +2832,7 @@ function_response_data = {
2832
2832
  "STACK_ID": "arn:aws:cloudformation:us-east-1:111122223333:stack/AccountAssessmentStack/bc6befc0-dacb-11ed-921f-0a41af233cd7",
2833
2833
  "TABLE_JOBS": "AccountAssessmentStack-JobHistoryTableE4B293DD-1QRBBBDKUU8G9",
2834
2834
  "COMPONENT_TABLE": "AccountAssessmentStack-DelegatedAdminsTable29E80916-F34FK4FZGFP5",
2835
- "SOLUTION_VERSION": "v1.0.3",
2835
+ "SOLUTION_VERSION": "latest version",
2836
2836
  }
2837
2837
  },
2838
2838
  "TracingConfig": {"Mode": "Active"},
@@ -2923,7 +2923,7 @@ mock_instances_3 = {
2923
2923
  "Placement": {"AvailabilityZone": "us-west-2b"},
2924
2924
  "PublicIpAddress": "22.23.24.25",
2925
2925
  "PublicDnsName": "ec2-22-23-24-25.us-west-2.compute.amazonaws.com",
2926
- "PrivateIpAddress": "10.0.9.1",
2926
+ "PrivateIpAddress": "10.latest version",
2927
2927
  "State": {"Name": "running"},
2928
2928
  "Tags": [
2929
2929
  {"Key": "Account", "Value": "555566667777"},
@@ -3080,7 +3080,7 @@ mock_instances_7 = {
3080
3080
  "InstanceType": "c5d.18xlarge",
3081
3081
  "Placement": {"AvailabilityZone": "eu-west-2a"},
3082
3082
  "PublicIpAddress": "22.23.24.27",
3083
- "PrivateIpAddress": "10.0.9.3",
3083
+ "PrivateIpAddress": "10.latest version",
3084
3084
  "State": {"Name": "running"},
3085
3085
  "Tags": [
3086
3086
  {"Key": "Account", "Value": "777755556666"},
@@ -3228,7 +3228,7 @@ mock_instances_11 = {
3228
3228
  "InstanceType": "c5d.12xlarge",
3229
3229
  "Placement": {"AvailabilityZone": "us-east-2c"},
3230
3230
  "PublicIpAddress": "22.23.24.26",
3231
- "PrivateIpAddress": "10.0.9.2",
3231
+ "PrivateIpAddress": "10.latest version",
3232
3232
  "State": {"Name": "running"},
3233
3233
  "Tags": [
3234
3234
  {"Key": "Account", "Value": "111122223333"},
@@ -1,6 +1,6 @@
1
1
  """
2
2
  Comprehensive AWS Resource Collector for Multi-Account Organizations
3
- Sprint 1: Discovery & Assessment - Enhanced for parallel processing
3
+ Phase 1: Discovery & Assessment - Enhanced for parallel processing
4
4
  Supports any organization size: 10, 60, 200+ accounts dynamically
5
5
  """
6
6
 
@@ -14,12 +14,13 @@ import boto3
14
14
  from botocore.exceptions import ClientError, NoCredentialsError
15
15
 
16
16
  from runbooks.inventory.collectors.base import BaseResourceCollector
17
+ from runbooks.common.aws_profile_manager import AWSProfileManager, get_current_account_id
17
18
 
18
19
 
19
20
  class ComprehensiveCollector(BaseResourceCollector):
20
21
  """
21
22
  Collect all AWS resources across multi-account organization with parallel processing.
22
- Optimized for Sprint 1 discovery goals.
23
+ Optimized for Phase 1 discovery goals.
23
24
  """
24
25
 
25
26
  def __init__(self, profile: str = None, parallel_workers: int = 10):
@@ -100,7 +101,7 @@ class ComprehensiveCollector(BaseResourceCollector):
100
101
  # Generate summary statistics
101
102
  results["summary"] = self._generate_summary(results["resources"])
102
103
 
103
- # Save results to Sprint 1 artifacts
104
+ # Save results to Phase 1 artifacts
104
105
  self._save_results(results)
105
106
 
106
107
  return results
@@ -215,7 +216,7 @@ class ComprehensiveCollector(BaseResourceCollector):
215
216
  """
216
217
  html_content = self._create_visualization_html(results)
217
218
 
218
- output_path = "artifacts/sprint-1/inventory/visualization.html"
219
+ output_path = "artifacts/phase-1/inventory/visualization.html"
219
220
  with open(output_path, "w") as f:
220
221
  f.write(html_content)
221
222
 
@@ -228,7 +229,7 @@ class ComprehensiveCollector(BaseResourceCollector):
228
229
  <!DOCTYPE html>
229
230
  <html>
230
231
  <head>
231
- <title>AWS Multi-Account Inventory - Sprint 1</title>
232
+ <title>AWS Multi-Account Inventory - Phase 1</title>
232
233
  <script src="https://d3js.org/d3.v7.min.js"></script>
233
234
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
234
235
  <style>
@@ -243,7 +244,7 @@ class ComprehensiveCollector(BaseResourceCollector):
243
244
  </head>
244
245
  <body>
245
246
  <h1>🏗️ AWS Organization Inventory Dashboard</h1>
246
- <h2>Sprint 1: Discovery & Assessment</h2>
247
+ <h2>Phase 1: Discovery & Assessment</h2>
247
248
 
248
249
  <div class="metrics">
249
250
  <div class="metric">
@@ -292,16 +293,32 @@ class ComprehensiveCollector(BaseResourceCollector):
292
293
  return html
293
294
 
294
295
  def _save_results(self, results: Dict):
295
- """Save results to Sprint 1 artifacts directory."""
296
- output_path = "artifacts/sprint-1/inventory/resources.json"
296
+ """Save results to Phase 1 artifacts directory."""
297
+ output_path = "artifacts/phase-1/inventory/resources.json"
297
298
  with open(output_path, "w") as f:
298
299
  json.dump(results, f, indent=2, default=str)
299
300
  print(f"Inventory saved: {output_path}")
300
301
 
301
302
  def _discover_all_accounts(self) -> List[str]:
302
303
  """Discover all accounts in the organization (enhanced for multi-account org)."""
303
- # Enhanced mock for comprehensive organization discovery
304
- base_accounts = ["123456789012", "234567890123", "345678901234"]
304
+ try:
305
+ # Try real organization discovery first
306
+ profile_manager = AWSProfileManager(self.profile)
307
+ org_accounts = profile_manager.discover_organization_accounts()
308
+
309
+ if org_accounts:
310
+ account_ids = [acc['Id'] for acc in org_accounts]
311
+ print(f"🏢 Organization Discovery: {len(account_ids)} accounts found")
312
+ return account_ids
313
+ except Exception as e:
314
+ print(f"⚠️ Organization discovery failed, using mock: {e}")
315
+
316
+ # Fallback to mock organization for testing
317
+ profile_manager = AWSProfileManager(self.profile)
318
+ current_account = profile_manager.get_account_id()
319
+
320
+ # Include current account plus simulated additional accounts
321
+ base_accounts = [current_account, "234567890123", "345678901234"]
305
322
 
306
323
  # Generate additional accounts to simulate large organization
307
324
  additional_accounts = []
@@ -310,7 +327,7 @@ class ComprehensiveCollector(BaseResourceCollector):
310
327
  additional_accounts.append(account_id)
311
328
 
312
329
  all_accounts = base_accounts + additional_accounts
313
- print(f"🏢 Organization Discovery: {len(all_accounts)} accounts found")
330
+ print(f"🏢 Mock Organization Discovery: {len(all_accounts)} accounts simulated")
314
331
  return all_accounts
315
332
 
316
333
  def _get_account_session(self, account_id: str):
@@ -319,7 +319,7 @@ class NetworkTopologyCollector(BaseResourceCollector):
319
319
  if not regions:
320
320
  regions = ["us-east-1", "us-west-2", "eu-west-1"] # Default enterprise regions
321
321
 
322
- print_header("Network Topology Discovery", "v0.9.1")
322
+ print_header("Network Topology Discovery", "latest version")
323
323
  topology = {
324
324
  "account_id": account.account_id,
325
325
  "timestamp": datetime.utcnow().isoformat(),
@@ -531,7 +531,7 @@ class TransitGatewayCollector(BaseResourceCollector):
531
531
  if not regions:
532
532
  regions = ["us-east-1", "us-west-2", "eu-west-1"]
533
533
 
534
- print_header("Transit Gateway Discovery", "v0.9.1")
534
+ print_header("Transit Gateway Discovery", "latest version")
535
535
  tgw_analysis = {
536
536
  "account_id": account.account_id,
537
537
  "timestamp": datetime.utcnow().isoformat(),
@@ -203,8 +203,8 @@ python find_orphaned_stacks.py --filename Drift_Detection -v --profile $MANAGEME
203
203
 
204
204
  ```bash
205
205
  # Business scenarios with proven savings (TESTED ✅)
206
- runbooks finops --scenario workspaces # FinOps-24: $13,020 annual
207
- runbooks finops --scenario snapshots # FinOps-23: $119,700 annual
206
+ runbooks finops --scenario workspaces # FinOps-24: significant annual savings
207
+ runbooks finops --scenario snapshots # FinOps-23: significant annual savings
208
208
  runbooks finops --scenario nat-gateway # FinOps-26: $8K-$12K potential
209
209
  runbooks finops --scenario elastic-ip # FinOps-EIP: $3.65/month per IP
210
210
  runbooks finops --scenario ebs # FinOps-EBS: 15-20% storage optimization
@@ -615,7 +615,7 @@ if __name__ == "__main__":
615
615
  "Protocol": {"DisplayOrder": 1, "Heading": "In Protocol"},
616
616
  "FromPort": {"DisplayOrder": 2, "Heading": "Port From", "Delimiter": False},
617
617
  "ToPort": {"DisplayOrder": 3, "Heading": "Port To", "Delimiter": False},
618
- "From": {"DisplayOrder": 4, "Heading": "From", "Condition": ["10.1.1.0/24"]},
618
+ "From": {"DisplayOrder": 4, "Heading": "From", "Condition": ["10.latest version/24"]},
619
619
  # 'UserIdGroupPairs': {'DisplayOrder': 5, 'Heading': 'Group Pairs'},
620
620
  # 'Description' : {'DisplayOrder': 6, 'Heading': 'Description'}
621
621
  },
@@ -1138,7 +1138,7 @@ class EnhancedOrganizationsDiscovery:
1138
1138
  medium_spend_accounts = {
1139
1139
  k: round(v, 2)
1140
1140
  for k, v in cost_by_account.items()
1141
- if 100 <= v <= 1000 # $100-$1000/month
1141
+ if 100 <= v <= 1000 # significant value range$1000/month
1142
1142
  }
1143
1143
 
1144
1144
  logger.info(f"✅ Cost validation complete: ${total_cost:.2f} across {len(cost_by_account)} accounts")
@@ -157,7 +157,7 @@ class VPCAnalyzer:
157
157
  self.last_awso_analysis = None
158
158
  self.landing_zone_sessions = [] # Enhanced: Store cross-account sessions
159
159
 
160
- print_header(f"VPC Analyzer v0.9.9", "Multi-Organization Landing Zone Enhanced")
160
+ print_header(f"VPC Analyzer latest version", "Multi-Organization Landing Zone Enhanced")
161
161
 
162
162
  if self.enable_multi_account:
163
163
  print_info(f"🎯 Target: 60-account Multi-Organization Landing Zone discovery")
@@ -20,7 +20,7 @@ Features:
20
20
 
21
21
  Author: CloudOps Runbooks Team
22
22
  Version: 0.7.8
23
- Enhanced for Sprint 2 VPC Scope Expansion with Traffic Analysis
23
+ Enhanced for Phase 2 VPC Scope Expansion with Traffic Analysis
24
24
  """
25
25
 
26
26
  import ipaddress
@@ -736,7 +736,7 @@ class VPCFlowAnalyzer(BaseInventory):
736
736
 
737
737
  # Strategy 1: VPC Endpoints
738
738
  if monthly_cost > 50:
739
- vpc_endpoint_savings = min(monthly_cost * 0.3, 100) # Max $100 savings
739
+ vpc_endpoint_savings = min(monthly_cost * 0.3, 100) # Max substantial savings
740
740
  strategies.append(
741
741
  {
742
742
  "strategy": "VPC_ENDPOINTS",