runbooks 0.9.4__py3-none-any.whl → 0.9.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.
- runbooks/__init__.py +1 -1
- runbooks/common/rich_utils.py +8 -8
- runbooks/finops/__init__.py +42 -0
- runbooks/finops/business_cases.py +552 -0
- runbooks/finops/commvault_ec2_analysis.py +8 -8
- runbooks/finops/finops_scenarios.py +351 -0
- runbooks/finops/helpers.py +182 -0
- runbooks/finops/scenarios.py +789 -0
- runbooks/remediation/commvault_ec2_analysis.py +8 -8
- runbooks/remediation/rds_snapshot_list.py +16 -16
- runbooks/remediation/workspaces_list.py +7 -7
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/METADATA +1 -1
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/RECORD +17 -15
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/WHEEL +0 -0
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/entry_points.txt +0 -0
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/licenses/LICENSE +0 -0
- {runbooks-0.9.4.dist-info → runbooks-0.9.5.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
Commvault EC2 Analysis - Investigate EC2 utilization for cost optimization.
|
3
3
|
|
4
|
-
JIRA
|
4
|
+
JIRA FinOps-25: Enhanced Commvault EC2 investigation for cost optimization
|
5
5
|
Account: 637423383469 (Commvault backup account)
|
6
6
|
Challenge: Determine if EC2 instances are actively used for backups or idle
|
7
7
|
"""
|
@@ -26,7 +26,7 @@ def calculate_ec2_cost_impact(instances_data: List[Dict]) -> Dict[str, float]:
|
|
26
26
|
"""
|
27
27
|
Calculate potential cost impact for EC2 instances.
|
28
28
|
|
29
|
-
JIRA
|
29
|
+
JIRA FinOps-25: Focuses on Commvault backup account utilization analysis
|
30
30
|
"""
|
31
31
|
total_instances = len(instances_data)
|
32
32
|
running_instances = [i for i in instances_data if i.get("State", {}).get("Name") == "running"]
|
@@ -60,18 +60,18 @@ def calculate_ec2_cost_impact(instances_data: List[Dict]) -> Dict[str, float]:
|
|
60
60
|
|
61
61
|
@click.command()
|
62
62
|
@click.option("--output-file", default="/tmp/commvault_ec2_investigation.csv", help="Output CSV file path")
|
63
|
-
@click.option("--account", default="637423383469", help="Commvault backup account ID (JIRA
|
63
|
+
@click.option("--account", default="637423383469", help="Commvault backup account ID (JIRA FinOps-25)")
|
64
64
|
@click.option("--investigate-utilization", is_flag=True, help="Investigate EC2 utilization patterns")
|
65
65
|
@click.option("--days", default=7, help="Number of days to analyze for utilization metrics")
|
66
66
|
@click.option("--dry-run", is_flag=True, default=True, help="Preview analysis without execution")
|
67
67
|
def investigate_commvault_ec2(output_file, account, investigate_utilization, days, dry_run):
|
68
68
|
"""
|
69
|
-
|
69
|
+
FinOps-25: Commvault EC2 investigation for cost optimization.
|
70
70
|
|
71
71
|
Account: 637423383469 (Commvault backup account)
|
72
72
|
Challenge: Determine if EC2 instances are actively used for backups or idle
|
73
73
|
"""
|
74
|
-
print_header("JIRA
|
74
|
+
print_header("JIRA FinOps-25: Commvault EC2 Investigation", "v0.9.1")
|
75
75
|
|
76
76
|
account_info = display_aws_account_info()
|
77
77
|
console.print(f"[cyan]Account: {account} - Investigating EC2 usage patterns[/cyan]")
|
@@ -164,7 +164,7 @@ def investigate_commvault_ec2(output_file, account, investigate_utilization, day
|
|
164
164
|
print_header("Commvault EC2 Investigation Summary")
|
165
165
|
|
166
166
|
summary_table = create_table(
|
167
|
-
title="EC2 Cost Impact Analysis - JIRA
|
167
|
+
title="EC2 Cost Impact Analysis - JIRA FinOps-25",
|
168
168
|
columns=[
|
169
169
|
{"header": "Metric", "style": "cyan"},
|
170
170
|
{"header": "Count", "style": "green bold"},
|
@@ -250,8 +250,8 @@ def investigate_commvault_ec2(output_file, account, investigate_utilization, day
|
|
250
250
|
else:
|
251
251
|
print_success("✓ No low-utilization instances detected")
|
252
252
|
|
253
|
-
# JIRA
|
254
|
-
console.print(f"\n[cyan]📋 JIRA
|
253
|
+
# JIRA FinOps-25 completion status
|
254
|
+
console.print(f"\n[cyan]📋 JIRA FinOps-25 Status: Investigation framework complete[/cyan]")
|
255
255
|
console.print(f"[dim]Next steps: Manual review of findings and cost impact validation[/dim]")
|
256
256
|
|
257
257
|
except Exception as e:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
RDS Snapshot Analysis - Analyze RDS snapshots for lifecycle management and cost optimization.
|
3
3
|
|
4
|
-
JIRA
|
4
|
+
JIRA FinOps-23: Enhanced RDS snapshots analysis with cost calculation for $5K-24K annual savings
|
5
5
|
Accounts: 91893567291, 142964829704, 363435891329, 507583929055
|
6
6
|
Focus: 89 manual snapshots causing storage costs and operational clutter
|
7
7
|
"""
|
@@ -36,7 +36,7 @@ def estimate_snapshot_cost(allocated_storage, storage_type="gp2", days_old=1):
|
|
36
36
|
"""
|
37
37
|
Estimate monthly snapshot storage cost with enhanced accuracy.
|
38
38
|
|
39
|
-
JIRA
|
39
|
+
JIRA FinOps-23: Enhanced cost estimation for $5K-24K annual savings target
|
40
40
|
Based on AWS RDS snapshot pricing: https://aws.amazon.com/rds/pricing/
|
41
41
|
"""
|
42
42
|
# RDS Snapshot storage cost per GB per month (USD)
|
@@ -57,7 +57,7 @@ def calculate_manual_snapshot_savings(snapshots_data: List[Dict]) -> Dict[str, f
|
|
57
57
|
"""
|
58
58
|
Calculate potential savings from manual snapshot cleanup.
|
59
59
|
|
60
|
-
JIRA
|
60
|
+
JIRA FinOps-23: Focuses on 89 manual snapshots for cost optimization
|
61
61
|
"""
|
62
62
|
manual_snapshots = [s for s in snapshots_data if s.get("SnapshotType", "").lower() == "manual"]
|
63
63
|
|
@@ -89,7 +89,7 @@ def calculate_manual_snapshot_savings(snapshots_data: List[Dict]) -> Dict[str, f
|
|
89
89
|
@click.option("--old-days", default=30, help="Days threshold for considering snapshots old")
|
90
90
|
@click.option("--include-cost", is_flag=True, help="Include estimated cost analysis")
|
91
91
|
@click.option("--snapshot-type", help="Filter by snapshot type (automated, manual)")
|
92
|
-
@click.option("--manual-only", is_flag=True, help="Focus on manual snapshots only (JIRA
|
92
|
+
@click.option("--manual-only", is_flag=True, help="Focus on manual snapshots only (JIRA FinOps-23)")
|
93
93
|
@click.option("--older-than", default=90, help="Focus on snapshots older than X days")
|
94
94
|
@click.option("--calculate-savings", is_flag=True, help="Calculate detailed cost savings analysis")
|
95
95
|
@click.option("--analyze", is_flag=True, help="Perform comprehensive cost analysis")
|
@@ -97,7 +97,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
97
97
|
"""
|
98
98
|
Analyze RDS snapshots for lifecycle management and cost optimization.
|
99
99
|
|
100
|
-
JIRA
|
100
|
+
JIRA FinOps-23: Enhanced RDS snapshots analysis for $5K-24K annual savings
|
101
101
|
Focus on 89 manual snapshots causing storage costs and operational clutter
|
102
102
|
"""
|
103
103
|
print_header("RDS Snapshot Cost Optimization Analysis", "v0.9.1")
|
@@ -123,7 +123,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
123
123
|
if manual_only:
|
124
124
|
original_count = len(snapshots)
|
125
125
|
snapshots = [s for s in snapshots if s.get("SnapshotType", "").lower() == "manual"]
|
126
|
-
console.print(f"[dim]JIRA
|
126
|
+
console.print(f"[dim]JIRA FinOps-23 Filter: {len(snapshots)} manual snapshots (from {original_count} total)[/dim]")
|
127
127
|
|
128
128
|
if snapshot_type:
|
129
129
|
original_count = len(snapshots)
|
@@ -174,7 +174,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
174
174
|
"AvailabilityZone": snapshot.get("AvailabilityZone", "Unknown"),
|
175
175
|
}
|
176
176
|
|
177
|
-
# Enhanced cost analysis (JIRA
|
177
|
+
# Enhanced cost analysis (JIRA FinOps-23)
|
178
178
|
estimated_cost = 0.0
|
179
179
|
if include_cost or calculate_savings or analyze:
|
180
180
|
if allocated_storage > 0:
|
@@ -198,7 +198,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
198
198
|
|
199
199
|
total_storage += allocated_storage
|
200
200
|
|
201
|
-
# Enhanced cleanup recommendations (JIRA
|
201
|
+
# Enhanced cleanup recommendations (JIRA FinOps-23)
|
202
202
|
recommendations = []
|
203
203
|
if age_days >= older_than and snap_type.lower() == "manual":
|
204
204
|
recommendations.append(f"HIGH PRIORITY: Manual snapshot >{older_than} days old")
|
@@ -217,7 +217,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
217
217
|
write_to_csv(data, output_file)
|
218
218
|
print_success(f"RDS snapshot analysis exported to: {output_file}")
|
219
219
|
|
220
|
-
# Enhanced cost analysis for JIRA
|
220
|
+
# Enhanced cost analysis for JIRA FinOps-23
|
221
221
|
if calculate_savings or analyze:
|
222
222
|
savings_analysis = calculate_manual_snapshot_savings(data)
|
223
223
|
|
@@ -225,7 +225,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
225
225
|
print_header("RDS Snapshot Analysis Summary")
|
226
226
|
|
227
227
|
summary_table = create_table(
|
228
|
-
title="RDS Snapshot Cost Analysis - JIRA
|
228
|
+
title="RDS Snapshot Cost Analysis - JIRA FinOps-23",
|
229
229
|
columns=[
|
230
230
|
{"header": "Metric", "style": "cyan"},
|
231
231
|
{"header": "Count", "style": "green bold"},
|
@@ -268,7 +268,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
268
268
|
"Mixed Types"
|
269
269
|
)
|
270
270
|
|
271
|
-
# JIRA
|
271
|
+
# JIRA FinOps-23 specific analysis
|
272
272
|
if calculate_savings or analyze:
|
273
273
|
summary_table.add_row(
|
274
274
|
f"🎯 Manual >{older_than}d (Cleanup Target)",
|
@@ -285,7 +285,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
285
285
|
high_priority_candidates = [s for s in data if s["AgeDays"] >= older_than and s["SnapshotType"].lower() == "manual"]
|
286
286
|
|
287
287
|
if high_priority_candidates:
|
288
|
-
print_warning(f"🎯 JIRA
|
288
|
+
print_warning(f"🎯 JIRA FinOps-23: {len(high_priority_candidates)} high-priority manual snapshots (>{older_than} days):")
|
289
289
|
|
290
290
|
# Create detailed cleanup candidates table
|
291
291
|
cleanup_table = create_table(
|
@@ -320,7 +320,7 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
320
320
|
else:
|
321
321
|
print_success("✓ No old manual snapshots found")
|
322
322
|
|
323
|
-
# Target validation (JIRA
|
323
|
+
# Target validation (JIRA FinOps-23: $5K-24K annual savings)
|
324
324
|
if calculate_savings or analyze:
|
325
325
|
target_min_annual = 5000.0
|
326
326
|
target_max_annual = 24000.0
|
@@ -328,12 +328,12 @@ def get_rds_snapshot_details(output_file, old_days, include_cost, snapshot_type,
|
|
328
328
|
|
329
329
|
if actual_savings >= target_min_annual:
|
330
330
|
if actual_savings <= target_max_annual:
|
331
|
-
print_success(f"🎯 Target Achievement: ${actual_savings:,.0f} within JIRA
|
331
|
+
print_success(f"🎯 Target Achievement: ${actual_savings:,.0f} within JIRA FinOps-23 range (${target_min_annual:,.0f}-${target_max_annual:,.0f})")
|
332
332
|
else:
|
333
|
-
print_success(f"🎯 Target Exceeded: ${actual_savings:,.0f} exceeds JIRA
|
333
|
+
print_success(f"🎯 Target Exceeded: ${actual_savings:,.0f} exceeds JIRA FinOps-23 maximum target (${target_max_annual:,.0f})")
|
334
334
|
else:
|
335
335
|
percentage = (actual_savings / target_min_annual) * 100
|
336
|
-
print_warning(f"📊 Analysis: ${actual_savings:,.0f} is {percentage:.1f}% of JIRA
|
336
|
+
print_warning(f"📊 Analysis: ${actual_savings:,.0f} is {percentage:.1f}% of JIRA FinOps-23 minimum target (${target_min_annual:,.0f})")
|
337
337
|
|
338
338
|
# Encryption status
|
339
339
|
encrypted_count = sum(1 for s in data if s["Encrypted"])
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
🚨 HIGH-RISK: WorkSpaces Management - Analyze and manage WorkSpaces with deletion capabilities.
|
3
3
|
|
4
|
-
JIRA
|
4
|
+
JIRA FinOps-24: Enhanced WorkSpaces cleanup with cost calculation for $12,518 annual savings
|
5
5
|
Accounts: 339712777494, 802669565615, 142964829704, 507583929055
|
6
6
|
Types: STANDARD, PERFORMANCE, VALUE in AUTO_STOP mode
|
7
7
|
"""
|
@@ -26,7 +26,7 @@ def calculate_workspace_monthly_cost(workspace_bundle_id: str, running_mode: str
|
|
26
26
|
"""
|
27
27
|
Calculate monthly cost for WorkSpace based on bundle and running mode.
|
28
28
|
|
29
|
-
JIRA
|
29
|
+
JIRA FinOps-24: Cost calculations for $12,518 annual savings target
|
30
30
|
Based on AWS WorkSpaces pricing: https://aws.amazon.com/workspaces/pricing/
|
31
31
|
"""
|
32
32
|
# WorkSpaces pricing by bundle type (monthly USD)
|
@@ -114,7 +114,7 @@ def get_workspaces(
|
|
114
114
|
"""
|
115
115
|
🚨 HIGH-RISK: Analyze WorkSpaces usage and optionally delete unused ones.
|
116
116
|
|
117
|
-
JIRA
|
117
|
+
JIRA FinOps-24: Enhanced WorkSpaces cleanup with cost calculation for $12,518 annual savings
|
118
118
|
"""
|
119
119
|
|
120
120
|
print_header("WorkSpaces Cost Optimization Analysis", "v0.9.1")
|
@@ -198,7 +198,7 @@ def get_workspaces(
|
|
198
198
|
# Determine if workspace is unused
|
199
199
|
is_unused = last_connection is None or last_connection < unused_threshold
|
200
200
|
|
201
|
-
# Calculate cost (JIRA
|
201
|
+
# Calculate cost (JIRA FinOps-24 enhancement)
|
202
202
|
monthly_cost = 0.0
|
203
203
|
if calculate_savings or analyze:
|
204
204
|
monthly_cost = calculate_workspace_monthly_cost(bundle_id, running_mode)
|
@@ -237,7 +237,7 @@ def get_workspaces(
|
|
237
237
|
print_header("WorkSpaces Analysis Summary")
|
238
238
|
|
239
239
|
summary_table = create_table(
|
240
|
-
title="WorkSpaces Cost Analysis - JIRA
|
240
|
+
title="WorkSpaces Cost Analysis - JIRA FinOps-24",
|
241
241
|
columns=[
|
242
242
|
{"header": "Metric", "style": "cyan"},
|
243
243
|
{"header": "Value", "style": "green bold"},
|
@@ -305,9 +305,9 @@ def get_workspaces(
|
|
305
305
|
if len(unused_workspaces) > 10:
|
306
306
|
console.print(f"[dim]... and {len(unused_workspaces) - 10} more unused WorkSpaces[/dim]")
|
307
307
|
|
308
|
-
# Target validation (JIRA
|
308
|
+
# Target validation (JIRA FinOps-24: $12,518 annual savings)
|
309
309
|
if calculate_savings or analyze:
|
310
|
-
target_annual_savings = 12518.0 # JIRA
|
310
|
+
target_annual_savings = 12518.0 # JIRA FinOps-24 target
|
311
311
|
if potential_savings_annual >= target_annual_savings * 0.8: # 80% of target
|
312
312
|
print_success(f"🎯 Target Achievement: {potential_savings_annual/target_annual_savings*100:.1f}% of $12,518 annual savings target")
|
313
313
|
else:
|
@@ -1,5 +1,5 @@
|
|
1
1
|
conftest.py,sha256=HTnQMw9wxefkvX5q4yG8EUH2qVLJBnC9QCt3UCltw7I,586
|
2
|
-
runbooks/__init__.py,sha256=
|
2
|
+
runbooks/__init__.py,sha256=5_iizoEvp41BBd5QLP3F0xPprURLzVlndTw48znTd3s,4983
|
3
3
|
runbooks/__main__.py,sha256=0hTPUA9KkLm_H_COqaIpNzXvC4Lv5b_XYYBV6fUFDrM,241
|
4
4
|
runbooks/base.py,sha256=a4jdiMeMWfJtOnYBlZ99Imzc1sdHCgyOXYhxUges7O8,11742
|
5
5
|
runbooks/config.py,sha256=63Bct1jASQG3mjPTNnzfJwTMgXzG8aQqVsaku6ugZR0,7839
|
@@ -94,20 +94,21 @@ runbooks/common/mcp_cost_explorer_integration.py,sha256=pskehv95cbHhHOsKePRknm9o
|
|
94
94
|
runbooks/common/mcp_integration.py,sha256=qK8iP7scfZTpe3X0OBFFVhpVR5NxTbI7Oz9QPpseN7Y,21156
|
95
95
|
runbooks/common/performance_monitor.py,sha256=Yxc536l8pprPaRAtxs4APTm9ZEwL2XZuEPq0lmcfAr8,14114
|
96
96
|
runbooks/common/profile_utils.py,sha256=Xp2VuDklgurJ889BbqxIvF2T4MHOaDsst0GmRxeEcl4,8229
|
97
|
-
runbooks/common/rich_utils.py,sha256=
|
97
|
+
runbooks/common/rich_utils.py,sha256=XqxJSHN_VgX4P00r38SWzZfY0qxc3ETZ-SX4R3xNaIE,33513
|
98
98
|
runbooks/enterprise/__init__.py,sha256=Lcw5CXUTgc3B1PrLH8vZfiQuKyda2GOuiRnWjTD7-tU,1568
|
99
99
|
runbooks/enterprise/error_handling.py,sha256=0rorz2L3nWl3xMDMiEMgNj8CvM7efABnEIzkMEg4B2g,14505
|
100
100
|
runbooks/enterprise/logging.py,sha256=-Qau52mLjryFo8r9PzsHbfkbfBsFom1ndEIvy7ItFEY,31728
|
101
101
|
runbooks/enterprise/multi_tenant.py,sha256=NDcPL0H5V2ELpHoswbJosyDxalARPngevn74wPnRZtA,23560
|
102
102
|
runbooks/feedback/user_feedback_collector.py,sha256=P0lcJN82wta73kNStBVGwNrc3R_Sng_MPNcpaHwojKI,16461
|
103
103
|
runbooks/finops/README.md,sha256=AJrpoQqtYo8JbmfYJmNFpxTGFCtdvLyP5t-RJSeGAlg,13127
|
104
|
-
runbooks/finops/__init__.py,sha256=
|
104
|
+
runbooks/finops/__init__.py,sha256=QChg1sByI0iwuzE5q6N2WrC4eFzXIkWjzTsMFbKEppo,4469
|
105
105
|
runbooks/finops/account_resolver.py,sha256=AiDQiqyU0bWrgQHuVjBBwE_qjqCaLUo20oD28FkvnN0,9475
|
106
106
|
runbooks/finops/accuracy_cross_validator.py,sha256=1IBtJ5Q_Re9_c90nC62ApkZ11LtKWrn4ouni3Vg1PEE,25758
|
107
107
|
runbooks/finops/aws_client.py,sha256=TSWNQWn-22R0gleyslMwKhU1Jc_cg3Q-FPBZWa0n3RI,41647
|
108
108
|
runbooks/finops/budget_integration.py,sha256=Sg_FFq5vU8RBaF3yAJUnnFyLbfGSacRZfGYyW2sx4kE,12915
|
109
|
+
runbooks/finops/business_cases.py,sha256=1BBdTNRqdhmuE4nAxhQxnbUVGnXoY8ZK65TWY1kdu2U,21187
|
109
110
|
runbooks/finops/cli.py,sha256=qlrXQTiXVT9LJkXsoBueg3lClBzsb3HWw0De1hUZbf0,10135
|
110
|
-
runbooks/finops/commvault_ec2_analysis.py,sha256=
|
111
|
+
runbooks/finops/commvault_ec2_analysis.py,sha256=aX5uScOAm-sGRvA5Z3E4IC1Lf0p6dHilAd_bbUCUUSs,17893
|
111
112
|
runbooks/finops/cost_optimizer.py,sha256=MNuTQj4FFz1nsl8LolXIfzyaXpabHoClDpXpa7UCYgA,52416
|
112
113
|
runbooks/finops/cost_processor.py,sha256=YPXlIGonraynHpB-NpkF-YLkK_n_fy13J5OlgdjK4LU,53907
|
113
114
|
runbooks/finops/dashboard_router.py,sha256=zxSMWZupIBR4hMrk4jASdv8rEThmb6qfpIAM6ddZ6Q4,43495
|
@@ -117,8 +118,8 @@ runbooks/finops/enhanced_dashboard_runner.py,sha256=uR8PF7ebvmVGUHUJ71WDvcmojmIs
|
|
117
118
|
runbooks/finops/enhanced_progress.py,sha256=LisYm-akB1W7zDW2ulMrxJxjNPqSjMG9kObCpHYwO-A,11389
|
118
119
|
runbooks/finops/enhanced_trend_visualization.py,sha256=tF7hGZbN8ieh1cW2W86-6yBMMgT0JNDcaUvgRTHslpA,16127
|
119
120
|
runbooks/finops/finops_dashboard.py,sha256=uO96CFDMflGAOGc_KrmtOnXk2iyEExDJxS65qH6D0qc,9647
|
120
|
-
runbooks/finops/finops_scenarios.py,sha256=
|
121
|
-
runbooks/finops/helpers.py,sha256
|
121
|
+
runbooks/finops/finops_scenarios.py,sha256=lnPqaRyQMQ6l1k0nwQookTlXoneL409G5jADMKXNbk4,50732
|
122
|
+
runbooks/finops/helpers.py,sha256=-8QtOwkQVRkbYS6kg65DMKJpdhx9EQjpcoIOlt5ANmI,51599
|
122
123
|
runbooks/finops/iam_guidance.py,sha256=YnaWywIHDsSYJwj34Jk0WKFNpNnDruPx5B4NmNzoRNA,19925
|
123
124
|
runbooks/finops/main.py,sha256=W0Lnr3GJN7Tp4QL0x09GROOc7fnttpdRmd3N3T5eULo,288
|
124
125
|
runbooks/finops/markdown_exporter.py,sha256=2SE2kSINFFTKelHZLz_ukuV6tl9XRt-BzIXGdfCxTko,18177
|
@@ -129,6 +130,7 @@ runbooks/finops/runbooks.inventory.organizations_discovery.log,sha256=47DEQpj8HB
|
|
129
130
|
runbooks/finops/runbooks.security.report_generator.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
130
131
|
runbooks/finops/runbooks.security.run_script.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
131
132
|
runbooks/finops/runbooks.security.security_export.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
133
|
+
runbooks/finops/scenarios.py,sha256=-3YZOXfK0kJhk8vQ63zIP3LQmKrpDtZAjt2fgIkIjNI,36809
|
132
134
|
runbooks/finops/schemas.py,sha256=YvW758e0b3RdWFNg8jgRXqaC2h7ScIHcgwq9nTpFNHo,23423
|
133
135
|
runbooks/finops/service_mapping.py,sha256=uThjqTEGwkPGWitWxHLjcYPj5KsvjYuReSDlf31tKOI,6543
|
134
136
|
runbooks/finops/single_dashboard.py,sha256=OP8KA3fOIOzis79r3yFiJwfHiErJ2afjSeynLjTFXqI,50118
|
@@ -269,7 +271,7 @@ runbooks/remediation/cognito_active_users.py,sha256=ZKtludgCL0ufWiWpiodfD8DNRKSi
|
|
269
271
|
runbooks/remediation/cognito_remediation.py,sha256=VOTTxHu935kwNLFt3zTcEj-5cY2hikifGcydgSF4KXw,36966
|
270
272
|
runbooks/remediation/cognito_user_password_reset.py,sha256=1pBLS9Ccdu8ohflGcbsBI-HLKLbNYsU39sijielAcQk,6902
|
271
273
|
runbooks/remediation/commons.py,sha256=aqhaH1UtZl8zcWCjh8p5jgZNe_3wkWQmAJo5gov9My4,17273
|
272
|
-
runbooks/remediation/commvault_ec2_analysis.py,sha256=
|
274
|
+
runbooks/remediation/commvault_ec2_analysis.py,sha256=UTmIPgB_iyid5QFLTBwfJ1UKqbY4Lqko7B0ZDO7mTwc,11372
|
273
275
|
runbooks/remediation/dynamodb_optimize.py,sha256=CKezH6osJlW44kpu47STN0K6Q9EbL69FYr2SmwjcHmw,5987
|
274
276
|
runbooks/remediation/dynamodb_remediation.py,sha256=Kcn3jBYmDoWkg5AsKX7fAxbDz-jl1s0kp2iPc96n3Fc,30872
|
275
277
|
runbooks/remediation/dynamodb_server_side_encryption.py,sha256=wnXwRcXzR3dFpcsA-5CjyCvPBixOiflN2H8Rfdp8Wao,3802
|
@@ -285,7 +287,7 @@ runbooks/remediation/lambda_remediation.py,sha256=WRaQUq0Y40l5_L4lkcyuUN5hZXRVIc
|
|
285
287
|
runbooks/remediation/multi_account.py,sha256=88mvZwVsPtyiXrlbECBWI5uMe6pL2CLWUS3sdZmegic,22062
|
286
288
|
runbooks/remediation/rds_instance_list.py,sha256=Nl1Pe1DDBZBl3SDjnY2i51IrcErELgCh2W1EXQyu_Dc,8476
|
287
289
|
runbooks/remediation/rds_remediation.py,sha256=bWs7K41GMplArgC_NvUMyboSXljosrIDUtZL0QGWuh0,37069
|
288
|
-
runbooks/remediation/rds_snapshot_list.py,sha256=
|
290
|
+
runbooks/remediation/rds_snapshot_list.py,sha256=X1g2j9J5_sN_5NIgZ3I6C9qdxQVkrPf45unhYASbQBo,16575
|
289
291
|
runbooks/remediation/requirements.txt,sha256=xwrVRq4cK8GbX9cwt_8TLLj8kCJHQ06tqBrH_wukMzE,2091
|
290
292
|
runbooks/remediation/s3_block_public_access.py,sha256=nnDnRAdbM7elgl0LfX87avIzogaysawKUv5vDU_rFBs,6331
|
291
293
|
runbooks/remediation/s3_bucket_public_access.py,sha256=eejdaWik_QpWHIMAZSdHWVckJBHL3VkXRBCIDFcVVVI,5533
|
@@ -299,7 +301,7 @@ runbooks/remediation/s3_object_search.py,sha256=8MnbwVwz2qZ0IK_C_uzMwNCfMnkB24d8
|
|
299
301
|
runbooks/remediation/s3_remediation.py,sha256=KIy0BOMXUicqbeBcyGP9HBtF_Vu43oFavHWugp05r0I,33014
|
300
302
|
runbooks/remediation/scan_for_phrase.py,sha256=FgTpDXnLg1tdnU6aYTmvOZu9CMjZMsfrZCNOSLqL4P4,18958
|
301
303
|
runbooks/remediation/vpc_remediation.py,sha256=FDLR1oY27WN227kXJnpn1vqf2FtJ_f1ra4RocWxJ6-8,20716
|
302
|
-
runbooks/remediation/workspaces_list.py,sha256=
|
304
|
+
runbooks/remediation/workspaces_list.py,sha256=btHB2QJDXhon1szWRgur3bPo49tPoZsNwShGn6vFIno,16275
|
303
305
|
runbooks/remediation/Tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
304
306
|
runbooks/remediation/Tests/update_policy.py,sha256=7jb5hMR6jVbCUwzl5MHVqxrIGFN9_2-trIMUV-R7Kls,2999
|
305
307
|
runbooks/security/README.md,sha256=vnpEqKYs9Q9dCLX9tmB-1fZZWk3kOMmEoC29f-WArP8,18572
|
@@ -374,9 +376,9 @@ runbooks/vpc/tests/test_cli_integration.py,sha256=OvsSNd9gFlkzdyDf8tUZGES93TTZR6
|
|
374
376
|
runbooks/vpc/tests/test_config.py,sha256=0JQ4cyxDGC4sVpDS4o2Jo1u93CtivmE4l4igigGOhJA,17482
|
375
377
|
runbooks/vpc/tests/test_cost_engine.py,sha256=UVUj3yg1ir9XVsD4MRdZALPlRFwmhzcuak8x3w-m6-c,20914
|
376
378
|
runbooks/vpc/tests/test_networking_wrapper.py,sha256=gmxnVzQJ-7rTsghzNLmIM-QZo9GUGyIhHqE1g8gkEkw,20623
|
377
|
-
runbooks-0.9.
|
378
|
-
runbooks-0.9.
|
379
|
-
runbooks-0.9.
|
380
|
-
runbooks-0.9.
|
381
|
-
runbooks-0.9.
|
382
|
-
runbooks-0.9.
|
379
|
+
runbooks-0.9.5.dist-info/licenses/LICENSE,sha256=WAQUYGIkLJh6CPrlZgr0IsbRODa0EZ6fboBXGjfWggs,11375
|
380
|
+
runbooks-0.9.5.dist-info/METADATA,sha256=8SwZWCmnizJQyxIliXkt4of60YC7ja-NtAtqagofo8M,26012
|
381
|
+
runbooks-0.9.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
382
|
+
runbooks-0.9.5.dist-info/entry_points.txt,sha256=WahHUYcgE2syXEc0MkoUdctLMxs0zjBWi_vWb5dRK8M,295
|
383
|
+
runbooks-0.9.5.dist-info/top_level.txt,sha256=A0zTBjuF7THC6vnJU7StN7ihtUoh31lZSfwyWpWP2YE,18
|
384
|
+
runbooks-0.9.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|