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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. runbooks/__init__.py +31 -2
  2. runbooks/__init___optimized.py +18 -4
  3. runbooks/_platform/__init__.py +1 -5
  4. runbooks/_platform/core/runbooks_wrapper.py +141 -138
  5. runbooks/aws2/accuracy_validator.py +812 -0
  6. runbooks/base.py +7 -0
  7. runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
  8. runbooks/cfat/assessment/compliance.py +8 -8
  9. runbooks/cfat/assessment/runner.py +1 -0
  10. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  11. runbooks/cfat/models.py +6 -2
  12. runbooks/cfat/tests/__init__.py +6 -1
  13. runbooks/cli/__init__.py +13 -0
  14. runbooks/cli/commands/cfat.py +274 -0
  15. runbooks/cli/commands/finops.py +1164 -0
  16. runbooks/cli/commands/inventory.py +379 -0
  17. runbooks/cli/commands/operate.py +239 -0
  18. runbooks/cli/commands/security.py +248 -0
  19. runbooks/cli/commands/validation.py +825 -0
  20. runbooks/cli/commands/vpc.py +310 -0
  21. runbooks/cli/registry.py +107 -0
  22. runbooks/cloudops/__init__.py +23 -30
  23. runbooks/cloudops/base.py +96 -107
  24. runbooks/cloudops/cost_optimizer.py +549 -547
  25. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  26. runbooks/cloudops/interfaces.py +226 -227
  27. runbooks/cloudops/lifecycle_manager.py +5 -4
  28. runbooks/cloudops/mcp_cost_validation.py +252 -235
  29. runbooks/cloudops/models.py +78 -53
  30. runbooks/cloudops/monitoring_automation.py +5 -4
  31. runbooks/cloudops/notebook_framework.py +179 -215
  32. runbooks/cloudops/security_enforcer.py +125 -159
  33. runbooks/common/accuracy_validator.py +11 -0
  34. runbooks/common/aws_pricing.py +349 -326
  35. runbooks/common/aws_pricing_api.py +211 -212
  36. runbooks/common/aws_profile_manager.py +341 -0
  37. runbooks/common/aws_utils.py +75 -80
  38. runbooks/common/business_logic.py +127 -105
  39. runbooks/common/cli_decorators.py +36 -60
  40. runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
  41. runbooks/common/cross_account_manager.py +198 -205
  42. runbooks/common/date_utils.py +27 -39
  43. runbooks/common/decorators.py +235 -0
  44. runbooks/common/dry_run_examples.py +173 -208
  45. runbooks/common/dry_run_framework.py +157 -155
  46. runbooks/common/enhanced_exception_handler.py +15 -4
  47. runbooks/common/enhanced_logging_example.py +50 -64
  48. runbooks/common/enhanced_logging_integration_example.py +65 -37
  49. runbooks/common/env_utils.py +16 -16
  50. runbooks/common/error_handling.py +40 -38
  51. runbooks/common/lazy_loader.py +41 -23
  52. runbooks/common/logging_integration_helper.py +79 -86
  53. runbooks/common/mcp_cost_explorer_integration.py +478 -495
  54. runbooks/common/mcp_integration.py +63 -74
  55. runbooks/common/memory_optimization.py +140 -118
  56. runbooks/common/module_cli_base.py +37 -58
  57. runbooks/common/organizations_client.py +176 -194
  58. runbooks/common/patterns.py +204 -0
  59. runbooks/common/performance_monitoring.py +67 -71
  60. runbooks/common/performance_optimization_engine.py +283 -274
  61. runbooks/common/profile_utils.py +248 -39
  62. runbooks/common/rich_utils.py +643 -92
  63. runbooks/common/sre_performance_suite.py +177 -186
  64. runbooks/enterprise/__init__.py +1 -1
  65. runbooks/enterprise/logging.py +144 -106
  66. runbooks/enterprise/security.py +187 -204
  67. runbooks/enterprise/validation.py +43 -56
  68. runbooks/finops/__init__.py +29 -33
  69. runbooks/finops/account_resolver.py +1 -1
  70. runbooks/finops/advanced_optimization_engine.py +980 -0
  71. runbooks/finops/automation_core.py +268 -231
  72. runbooks/finops/business_case_config.py +184 -179
  73. runbooks/finops/cli.py +660 -139
  74. runbooks/finops/commvault_ec2_analysis.py +157 -164
  75. runbooks/finops/compute_cost_optimizer.py +336 -320
  76. runbooks/finops/config.py +20 -20
  77. runbooks/finops/cost_optimizer.py +488 -622
  78. runbooks/finops/cost_processor.py +332 -214
  79. runbooks/finops/dashboard_runner.py +1006 -172
  80. runbooks/finops/ebs_cost_optimizer.py +991 -657
  81. runbooks/finops/elastic_ip_optimizer.py +317 -257
  82. runbooks/finops/enhanced_mcp_integration.py +340 -0
  83. runbooks/finops/enhanced_progress.py +40 -37
  84. runbooks/finops/enhanced_trend_visualization.py +3 -2
  85. runbooks/finops/enterprise_wrappers.py +230 -292
  86. runbooks/finops/executive_export.py +203 -160
  87. runbooks/finops/helpers.py +130 -288
  88. runbooks/finops/iam_guidance.py +1 -1
  89. runbooks/finops/infrastructure/__init__.py +80 -0
  90. runbooks/finops/infrastructure/commands.py +506 -0
  91. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  92. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  93. runbooks/finops/markdown_exporter.py +338 -175
  94. runbooks/finops/mcp_validator.py +1952 -0
  95. runbooks/finops/nat_gateway_optimizer.py +1513 -482
  96. runbooks/finops/network_cost_optimizer.py +657 -587
  97. runbooks/finops/notebook_utils.py +226 -188
  98. runbooks/finops/optimization_engine.py +1136 -0
  99. runbooks/finops/optimizer.py +25 -29
  100. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  101. runbooks/finops/reservation_optimizer.py +427 -363
  102. runbooks/finops/scenario_cli_integration.py +77 -78
  103. runbooks/finops/scenarios.py +1278 -439
  104. runbooks/finops/schemas.py +218 -182
  105. runbooks/finops/snapshot_manager.py +2289 -0
  106. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  107. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  108. runbooks/finops/tests/test_single_account_features.py +17 -17
  109. runbooks/finops/tests/validate_test_suite.py +1 -1
  110. runbooks/finops/types.py +3 -3
  111. runbooks/finops/validation_framework.py +263 -269
  112. runbooks/finops/vpc_cleanup_exporter.py +191 -146
  113. runbooks/finops/vpc_cleanup_optimizer.py +593 -575
  114. runbooks/finops/workspaces_analyzer.py +171 -182
  115. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  116. runbooks/integration/__init__.py +89 -0
  117. runbooks/integration/mcp_integration.py +1920 -0
  118. runbooks/inventory/CLAUDE.md +816 -0
  119. runbooks/inventory/README.md +3 -3
  120. runbooks/inventory/Tests/common_test_data.py +30 -30
  121. runbooks/inventory/__init__.py +2 -2
  122. runbooks/inventory/cloud_foundations_integration.py +144 -149
  123. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  124. runbooks/inventory/collectors/aws_networking.py +111 -101
  125. runbooks/inventory/collectors/base.py +4 -0
  126. runbooks/inventory/core/collector.py +495 -313
  127. runbooks/inventory/discovery.md +2 -2
  128. runbooks/inventory/drift_detection_cli.py +69 -96
  129. runbooks/inventory/find_ec2_security_groups.py +1 -1
  130. runbooks/inventory/inventory_mcp_cli.py +48 -46
  131. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  132. runbooks/inventory/mcp_inventory_validator.py +549 -465
  133. runbooks/inventory/mcp_vpc_validator.py +359 -442
  134. runbooks/inventory/organizations_discovery.py +56 -52
  135. runbooks/inventory/rich_inventory_display.py +33 -32
  136. runbooks/inventory/unified_validation_engine.py +278 -251
  137. runbooks/inventory/vpc_analyzer.py +733 -696
  138. runbooks/inventory/vpc_architecture_validator.py +293 -348
  139. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  140. runbooks/inventory/vpc_flow_analyzer.py +3 -3
  141. runbooks/main.py +152 -9147
  142. runbooks/main_final.py +91 -60
  143. runbooks/main_minimal.py +22 -10
  144. runbooks/main_optimized.py +131 -100
  145. runbooks/main_ultra_minimal.py +7 -2
  146. runbooks/mcp/__init__.py +36 -0
  147. runbooks/mcp/integration.py +679 -0
  148. runbooks/metrics/dora_metrics_engine.py +2 -2
  149. runbooks/monitoring/performance_monitor.py +9 -4
  150. runbooks/operate/dynamodb_operations.py +3 -1
  151. runbooks/operate/ec2_operations.py +145 -137
  152. runbooks/operate/iam_operations.py +146 -152
  153. runbooks/operate/mcp_integration.py +1 -1
  154. runbooks/operate/networking_cost_heatmap.py +33 -10
  155. runbooks/operate/privatelink_operations.py +1 -1
  156. runbooks/operate/rds_operations.py +223 -254
  157. runbooks/operate/s3_operations.py +107 -118
  158. runbooks/operate/vpc_endpoints.py +1 -1
  159. runbooks/operate/vpc_operations.py +648 -618
  160. runbooks/remediation/base.py +1 -1
  161. runbooks/remediation/commons.py +10 -7
  162. runbooks/remediation/commvault_ec2_analysis.py +71 -67
  163. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  164. runbooks/remediation/multi_account.py +24 -21
  165. runbooks/remediation/rds_snapshot_list.py +91 -65
  166. runbooks/remediation/remediation_cli.py +92 -146
  167. runbooks/remediation/universal_account_discovery.py +83 -79
  168. runbooks/remediation/workspaces_list.py +49 -44
  169. runbooks/security/__init__.py +19 -0
  170. runbooks/security/assessment_runner.py +1150 -0
  171. runbooks/security/baseline_checker.py +812 -0
  172. runbooks/security/cloudops_automation_security_validator.py +509 -535
  173. runbooks/security/compliance_automation_engine.py +17 -17
  174. runbooks/security/config/__init__.py +2 -2
  175. runbooks/security/config/compliance_config.py +50 -50
  176. runbooks/security/config_template_generator.py +63 -76
  177. runbooks/security/enterprise_security_framework.py +1 -1
  178. runbooks/security/executive_security_dashboard.py +519 -508
  179. runbooks/security/integration_test_enterprise_security.py +5 -3
  180. runbooks/security/multi_account_security_controls.py +959 -1210
  181. runbooks/security/real_time_security_monitor.py +422 -444
  182. runbooks/security/run_script.py +1 -1
  183. runbooks/security/security_baseline_tester.py +1 -1
  184. runbooks/security/security_cli.py +143 -112
  185. runbooks/security/test_2way_validation.py +439 -0
  186. runbooks/security/two_way_validation_framework.py +852 -0
  187. runbooks/sre/mcp_reliability_engine.py +6 -6
  188. runbooks/sre/production_monitoring_framework.py +167 -177
  189. runbooks/tdd/__init__.py +15 -0
  190. runbooks/tdd/cli.py +1071 -0
  191. runbooks/utils/__init__.py +14 -17
  192. runbooks/utils/logger.py +7 -2
  193. runbooks/utils/version_validator.py +51 -48
  194. runbooks/validation/__init__.py +6 -6
  195. runbooks/validation/cli.py +9 -3
  196. runbooks/validation/comprehensive_2way_validator.py +754 -708
  197. runbooks/validation/mcp_validator.py +906 -228
  198. runbooks/validation/terraform_citations_validator.py +104 -115
  199. runbooks/validation/terraform_drift_detector.py +447 -451
  200. runbooks/vpc/README.md +617 -0
  201. runbooks/vpc/__init__.py +8 -1
  202. runbooks/vpc/analyzer.py +577 -0
  203. runbooks/vpc/cleanup_wrapper.py +476 -413
  204. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  205. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  206. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  207. runbooks/vpc/config.py +92 -97
  208. runbooks/vpc/cost_engine.py +411 -148
  209. runbooks/vpc/cost_explorer_integration.py +553 -0
  210. runbooks/vpc/cross_account_session.py +101 -106
  211. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  212. runbooks/vpc/eni_gate_validator.py +961 -0
  213. runbooks/vpc/heatmap_engine.py +190 -162
  214. runbooks/vpc/mcp_no_eni_validator.py +681 -640
  215. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  216. runbooks/vpc/networking_wrapper.py +15 -8
  217. runbooks/vpc/pdca_remediation_planner.py +528 -0
  218. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  219. runbooks/vpc/runbooks_adapter.py +1167 -241
  220. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  221. runbooks/vpc/test_data_loader.py +358 -0
  222. runbooks/vpc/tests/conftest.py +314 -4
  223. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  224. runbooks/vpc/tests/test_cost_engine.py +0 -2
  225. runbooks/vpc/topology_generator.py +326 -0
  226. runbooks/vpc/unified_scenarios.py +1302 -1129
  227. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  228. runbooks-1.1.5.dist-info/METADATA +328 -0
  229. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
  230. runbooks/finops/README.md +0 -414
  231. runbooks/finops/accuracy_cross_validator.py +0 -647
  232. runbooks/finops/business_cases.py +0 -950
  233. runbooks/finops/dashboard_router.py +0 -922
  234. runbooks/finops/ebs_optimizer.py +0 -956
  235. runbooks/finops/embedded_mcp_validator.py +0 -1629
  236. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  237. runbooks/finops/finops_dashboard.py +0 -584
  238. runbooks/finops/finops_scenarios.py +0 -1218
  239. runbooks/finops/legacy_migration.py +0 -730
  240. runbooks/finops/multi_dashboard.py +0 -1519
  241. runbooks/finops/single_dashboard.py +0 -1113
  242. runbooks/finops/unlimited_scenarios.py +0 -393
  243. runbooks-1.1.3.dist-info/METADATA +0 -799
  244. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  245. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  246. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  247. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
@@ -45,9 +45,9 @@ class TestFinOpsConfig:
45
45
  config = FinOpsConfig()
46
46
 
47
47
  # Test default profile values
48
- assert config.billing_profile == "ams-admin-Billing-ReadOnlyAccess-909135376185"
49
- assert config.management_profile == "ams-admin-ReadOnlyAccess-909135376185"
50
- assert config.operational_profile == "ams-centralised-ops-ReadOnlyAccess-335083429030"
48
+ assert config.billing_profile == "${BILLING_PROFILE}"
49
+ assert config.management_profile == "${MANAGEMENT_PROFILE}"
50
+ assert config.operational_profile == "${CENTRALISED_OPS_PROFILE}"
51
51
 
52
52
  # Test analysis parameters
53
53
  assert config.time_range_days == 30
@@ -582,8 +582,8 @@ class TestReferenceImage5_ExportIntegration:
582
582
  "status": "completed",
583
583
  "available_profiles": ["profile1", "profile2"],
584
584
  "configured_profiles": {
585
- "billing": "ams-admin-Billing-ReadOnlyAccess-909135376185",
586
- "management": "ams-admin-ReadOnlyAccess-909135376185",
585
+ "billing": "${BILLING_PROFILE}",
586
+ "management": "${MANAGEMENT_PROFILE}",
587
587
  },
588
588
  }
589
589
 
@@ -3,7 +3,7 @@
3
3
  Single Account FinOps Features Test Suite - Definition of Done Validation.
4
4
 
5
5
  This test suite validates the 5 key features for single account analysis
6
- using REAL AWS data for account 499201730520 (ams-shared-services-non-prod).
6
+ using REAL AWS data for account ${ACCOUNT_ID} (ams-shared-services-non-prod).
7
7
 
8
8
  Purpose: Ensure comprehensive functionality validation against manager requirements.
9
9
 
@@ -16,7 +16,7 @@ Test Cases:
16
16
 
17
17
  Author: CloudOps Runbooks Team
18
18
  Version: 0.7.8 - Single Account Focus
19
- Target: Account 499201730520 (ams-shared-services-non-prod-ReadOnlyAccess)
19
+ Target: Account ${ACCOUNT_ID} (ams-shared-services-non-prod-ReadOnlyAccess)
20
20
  """
21
21
 
22
22
  import json
@@ -30,9 +30,9 @@ import boto3
30
30
  import pytest
31
31
 
32
32
  # Set environment for single account testing
33
- os.environ["SINGLE_AWS_PROFILE"] = "ams-shared-services-non-prod-ReadOnlyAccess-499201730520"
33
+ os.environ["SINGLE_AWS_PROFILE"] = "${SINGLE_AWS_PROFILE}"
34
34
  os.environ["AWS_PROFILE"] = os.environ["SINGLE_AWS_PROFILE"]
35
- os.environ["BILLING_PROFILE"] = "ams-admin-Billing-ReadOnlyAccess-909135376185"
35
+ os.environ["BILLING_PROFILE"] = "${BILLING_PROFILE}"
36
36
 
37
37
  # Import FinOps components for testing
38
38
  from runbooks.finops.finops_dashboard import (
@@ -53,10 +53,10 @@ class SingleAccountFinOpsConfig(FinOpsConfig):
53
53
  super().__init__()
54
54
 
55
55
  # Override for single account operation
56
- self.target_account = "ams-shared-services-non-prod-ReadOnlyAccess-499201730520"
56
+ self.target_account = "${SINGLE_AWS_PROFILE}"
57
57
 
58
58
  # Single account configuration
59
- self.billing_profile = os.environ.get("BILLING_PROFILE", "ams-admin-Billing-ReadOnlyAccess-909135376185")
59
+ self.billing_profile = os.environ.get("BILLING_PROFILE", "${BILLING_PROFILE}")
60
60
  self.management_profile = self.target_account
61
61
  self.operational_profile = self.target_account
62
62
 
@@ -67,7 +67,7 @@ class SingleAccountFinOpsConfig(FinOpsConfig):
67
67
 
68
68
  # Single account specific settings
69
69
  self.single_account_mode = True
70
- self.account_id = "499201730520" # Extracted from profile name
70
+ self.account_id = "${ACCOUNT_ID}" # Extracted from profile name
71
71
 
72
72
 
73
73
  class TestSingleAccountFeature1_CostTrendAnalysis:
@@ -75,7 +75,7 @@ class TestSingleAccountFeature1_CostTrendAnalysis:
75
75
  Feature 1: Single Account Cost Trend Analysis with Real AWS Data.
76
76
 
77
77
  Validates cost analysis functionality using real AWS Cost Explorer
78
- for account 499201730520 with billing profile access.
78
+ for account ${ACCOUNT_ID} with billing profile access.
79
79
  """
80
80
 
81
81
  @pytest.fixture
@@ -211,7 +211,7 @@ class TestSingleAccountFeature2_ResourceUtilizationHeatmap:
211
211
  Feature 2: Single Account Resource Utilization Heatmap with Real AWS Data.
212
212
 
213
213
  Validates resource utilization analysis using real EC2, RDS, S3 data
214
- for account 499201730520 with efficiency scoring and rightsizing.
214
+ for account ${ACCOUNT_ID} with efficiency scoring and rightsizing.
215
215
  """
216
216
 
217
217
  @pytest.fixture
@@ -374,7 +374,7 @@ class TestSingleAccountFeature3_ComplianceDashboard:
374
374
  Feature 3: Single Account Compliance Dashboard with Real AWS Config Data.
375
375
 
376
376
  Validates compliance audit functionality using real AWS Config
377
- for account 499201730520 with risk assessment and findings.
377
+ for account ${ACCOUNT_ID} with risk assessment and findings.
378
378
  """
379
379
 
380
380
  @pytest.fixture
@@ -527,7 +527,7 @@ class TestSingleAccountFeature4_RightsizingRecommendations:
527
527
  Feature 4: Single Account Rightsizing Recommendations with Real CloudWatch Metrics.
528
528
 
529
529
  Validates rightsizing functionality using real CloudWatch data
530
- for account 499201730520 with cost optimization recommendations.
530
+ for account ${ACCOUNT_ID} with cost optimization recommendations.
531
531
  """
532
532
 
533
533
  def test_rightsizing_with_real_metrics(self):
@@ -565,7 +565,7 @@ class TestSingleAccountFeature5_ExecutiveSummary:
565
565
  Feature 5: Single Account Executive Summary with Real Aggregated Data.
566
566
 
567
567
  Validates executive dashboard functionality combining all real data sources
568
- for account 499201730520 with C-suite presentation format.
568
+ for account ${ACCOUNT_ID} with C-suite presentation format.
569
569
  """
570
570
 
571
571
  def test_executive_summary_with_real_data(self):
@@ -629,15 +629,15 @@ class TestSingleAccountNotebookIntegration:
629
629
  def test_notebook_environment_setup(self):
630
630
  """Test notebook environment is properly configured."""
631
631
  # Verify environment variables
632
- assert os.environ.get("SINGLE_AWS_PROFILE") == "ams-shared-services-non-prod-ReadOnlyAccess-499201730520"
633
- assert os.environ.get("BILLING_PROFILE") == "ams-admin-Billing-ReadOnlyAccess-909135376185"
632
+ assert os.environ.get("SINGLE_AWS_PROFILE") == "${SINGLE_AWS_PROFILE}"
633
+ assert os.environ.get("BILLING_PROFILE") == "${BILLING_PROFILE}"
634
634
 
635
635
  # Verify AWS connectivity
636
636
  try:
637
637
  session = boto3.Session(profile_name=os.environ["BILLING_PROFILE"])
638
638
  sts = session.client("sts")
639
639
  identity = sts.get_caller_identity()
640
- assert identity["Account"] == "909135376185" # Billing account
640
+ assert identity["Account"] == "${BILLING_ACCOUNT_ID}" # Billing account
641
641
 
642
642
  print("✅ Notebook environment properly configured")
643
643
 
@@ -650,8 +650,8 @@ class TestSingleAccountNotebookIntegration:
650
650
 
651
651
  # Validate single account configuration
652
652
  assert config.single_account_mode is True
653
- assert config.account_id == "499201730520"
654
- assert config.target_account == "ams-shared-services-non-prod-ReadOnlyAccess-499201730520"
653
+ assert config.account_id == "${ACCOUNT_ID}"
654
+ assert config.target_account == "${SINGLE_AWS_PROFILE}"
655
655
  assert config.min_account_threshold == 1
656
656
  assert config.enable_cross_account is False
657
657
 
@@ -64,7 +64,7 @@ def validate_functionality():
64
64
 
65
65
  config = FinOpsConfig()
66
66
 
67
- assert config.billing_profile == "ams-admin-Billing-ReadOnlyAccess-909135376185"
67
+ assert config.billing_profile == "${BILLING_PROFILE}"
68
68
  assert config.dry_run is True
69
69
  assert config.target_savings_percent == 40
70
70
  print("✅ Configuration validation passed")
runbooks/finops/types.py CHANGED
@@ -1,4 +1,4 @@
1
- """Type definitions for CloudOps Runbooks FinOps Module."""
1
+ """Type definitions for CloudOps & FinOps Runbooks Module."""
2
2
 
3
3
  from typing import Dict, List, Optional, Tuple, TypedDict
4
4
 
@@ -33,7 +33,7 @@ class CostData(TypedDict):
33
33
 
34
34
  class DualMetricResult(TypedDict):
35
35
  """Type for dual-metric cost analysis results."""
36
-
36
+
37
37
  unblended_costs: Dict[str, float] # UnblendedCost data (technical perspective)
38
38
  amortized_costs: Dict[str, float] # AmortizedCost data (financial perspective)
39
39
  technical_total: float # Total UnblendedCost
@@ -51,7 +51,7 @@ class ProfileData(TypedDict):
51
51
 
52
52
  profile_name: str # Updated field name for consistency
53
53
  account_id: str
54
- current_month: float # Primary metric: UnblendedCost (technical accuracy)
54
+ current_month: float # Primary metric: UnblendedCost (technical accuracy)
55
55
  previous_month: float # Updated field name for consistency
56
56
  current_month_formatted: str # Formatted display for primary metric
57
57
  previous_month_formatted: str # Formatted display for primary metric