Skip to content

Commit 0d594ac

Browse files
Merge pull request #10 from pranavgaikwad/master
fix VPC deletion script, add EIP deletion script
2 parents 9bc3f40 + a0bd460 commit 0d594ac

File tree

3 files changed

+122
-3
lines changed

3 files changed

+122
-3
lines changed

aws/reporting/costmodel.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# cost models for different dev environments
2+
import os
3+
from math import ceil
4+
from datetime import datetime
5+
from common import get_all_regions
6+
from pricing import get_price_for_instance
7+
from docs import GoogleDocEditor
8+
9+
models_ec2 = {
10+
'ocp-dev-3': [
11+
(1, 't2.large'),
12+
(1, 'm5.large'),
13+
(1, 'm5.2xlarge'),
14+
(3, 'm5.xlarge'),
15+
(3, 'm5.large')
16+
],
17+
'ocp-dev-4': [
18+
(1, 't2.medium'),
19+
(3, 'm5.xlarge'),
20+
(3, 'm5.xlarge')
21+
],
22+
'ocs-dev-4': [
23+
(1, 't2.medium'),
24+
(3, 'm5.2xlarge'),
25+
(3, 'm5.2xlarge')
26+
]
27+
}
28+
29+
considered_regions = [
30+
'us-east-1',
31+
'us-east-2',
32+
'us-west-1',
33+
'us-west-2',
34+
'eu-central-1',
35+
'eu-west-1',
36+
# 'eu-west-2'
37+
]
38+
39+
def get_avg_cost_for_ec2_model(model):
40+
model_cost = []
41+
for count, instance_type in models_ec2[model]:
42+
avg_cost = 0.0
43+
for r in considered_regions:
44+
avg_cost += get_price_for_instance(instance_type, r) * 24.0 * 30
45+
avg_cost /= len(considered_regions)
46+
avg_cost *= count
47+
avg_cost = ceil(avg_cost)
48+
model_cost.append((count, instance_type, avg_cost))
49+
return model_cost
50+
51+
def to_rich_text(model):
52+
text = ""
53+
for m in model:
54+
text += """
55+
{} x {} = ${}
56+
""".format(m[0], m[1], m[2])
57+
return text
58+
59+
def get_total_for_model(model):
60+
total = 0.0
61+
for m in model:
62+
total += m[2]
63+
return total
64+
65+
if __name__ == "__main__":
66+
summary = """
67+
Updated On: {}
68+
69+
Following is a summary of costs for different development environmets used by Migration devs.
70+
71+
The estimation is based on latest costs of EC2 instances averaged over all regions we are in.
72+
73+
The instance sizes are assumed based on defaults in mig-agnosticd.
74+
75+
OCP 3 -> 4 Environment
76+
77+
OCP 3
78+
{}
79+
Total : ${}
80+
81+
OCP 4
82+
{}
83+
Total : ${}
84+
85+
OCS 3 -> 4 Environments
86+
87+
OCS 3
88+
{}
89+
Total : ${}
90+
91+
OCS 4
92+
{}
93+
Total : ${}
94+
95+
"""
96+
# document_id = os.environ['DOC_ID']
97+
now = (datetime.utcnow()).strftime("%a, %b %d, %y")
98+
ocp3_model = get_avg_cost_for_ec2_model('ocp-dev-3')
99+
ocp4_model = get_avg_cost_for_ec2_model('ocp-dev-4')
100+
ocs3_model = get_avg_cost_for_ec2_model('ocp-dev-3')
101+
ocs4_model = get_avg_cost_for_ec2_model('ocs-dev-4')
102+
# googleDocEditor = GoogleDocEditor(document_id)
103+
104+
summary = summary.format(
105+
now,
106+
to_rich_text(ocp3_model), get_total_for_model(ocp3_model),
107+
to_rich_text(ocp4_model), get_total_for_model(ocp4_model),
108+
to_rich_text(ocs3_model), get_total_for_model(ocs3_model),
109+
to_rich_text(ocs4_model), get_total_for_model(ocs4_model)
110+
)
111+
112+
print(summary)
113+
114+

aws/reporting/main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def delete_unassigned_eips(eips):
8888
return deleted_eips
8989

9090
def delete_vpcs():
91-
vpcs = load_from_file('./vpc.raw.pickle')
91+
vpcs = get_all_vpcs()
9292
deleted_vpcs = delete_orphan_vpcs(vpcs)
9393
return deleted_vpcs
9494

@@ -251,6 +251,8 @@ def get_old_instances_email_summary(oldInstancesSheet, allInstancesSheet):
251251
elif args[1] == 'purge_vpcs':
252252
numberOfVpcsDeleted = delete_vpcs()
253253
summaryRow['VPC Cleanup'] = 'Deleted {} instances'.format(numberOfVpcsDeleted)
254+
numberOfEipsDeleted = delete_unassigned_eips(get_all_eips())
255+
summaryRow['EC2 Cleanup'] = 'Deleted {} eips'.format(numberOfEipsDeleted)
254256

255257
else:
256258
pass

aws/reporting/vpc.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def delete_orphan_vpcs(vpcs):
7070
try:
7171
logger.info("{} Attempting to delete eni {}".format(region, eni.id))
7272
eni.detach()
73+
sleep(5)
7374
eni.delete()
7475
except Exception as e:
7576
logger.info("{} Error deleting eni {}".format(region, eni.id))
@@ -79,6 +80,7 @@ def delete_orphan_vpcs(vpcs):
7980
try:
8081
logger.info("{} Attempting to delete ig {}".format(region, ig.id))
8182
vpc_res.detach_internet_gateway(InternetGatewayId=ig.id)
83+
sleep(5)
8284
ig.delete()
8385
except Exception as e:
8486
logger.info("{} Error deleting ig {}".format(region, ig.id))
@@ -117,9 +119,10 @@ def delete_orphan_vpcs(vpcs):
117119
if sg.group_name != 'default':
118120
logger.info("{} Attempting to revoke ingress from group {}".format(region, sg.id))
119121
sg.revoke_ingress(IpPermissions=sg.ip_permissions)
122+
sleep(3)
120123
logger.info("{} Attempting to revoke egress from group {}".format(region, sg.id))
121124
sg.revoke_egress(IpPermissions=sg.ip_permissions_egress)
122-
except:
125+
except Exception as e:
123126
logger.info("{} Error revoking ingress / egress from group {}".format(region, sg.id))
124127
logger.error(str(e))
125128
# delete security groups
@@ -187,4 +190,4 @@ def delete_orphan_vpcs(vpcs):
187190
except Exception as e:
188191
logger.info("{} Error deleting vpc {}".format(region, vpc_res.id))
189192
logger.error(str(e))
190-
return deleted_vpcs
193+
return deleted_vpcs

0 commit comments

Comments
 (0)