Created
January 5, 2016 00:56
-
-
Save rwe/cd2ad4a39a6024185f87 to your computer and use it in GitHub Desktop.
Interactively clean up unused VPC security groups.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import sys | |
import boto | |
import readline # noqa: W0611 | |
def p(string): | |
sys.stdout.write(string) | |
sys.stdout.flush() | |
p('Connecting…') | |
ec2 = boto.connect_ec2() | |
empty_sgs = [] | |
nonempty_sgs = [] | |
p('fetching security groups…') | |
for sg in ec2.get_all_security_groups(): | |
p('.') | |
num = len(sg.instances()) | |
sg_list = nonempty_sgs if num else empty_sgs | |
sg_list.append({ | |
'id': sg.id, | |
'name': sg.name, | |
'count': len(sg.instances()), | |
}) | |
p('ok.\n') | |
def sg_sort_key(sg): | |
return (sg['count'], sg['id'], sg['name']) | |
if nonempty_sgs: | |
print '' | |
print 'Non-Empty Security Groups:' | |
for sg in sorted(nonempty_sgs, key=sg_sort_key): | |
print '{0[count]}\t{0[id]}\t{0[name]}'.format(sg) | |
if empty_sgs: | |
print '' | |
print 'Empty Security Groups:' | |
for sg in sorted(empty_sgs, key=sg_sort_key): | |
print '{0[id]}\t{0[name]}'.format(sg) | |
print '' | |
for sg in sorted(empty_sgs, key=sg_sort_key): | |
if sg['name'] == 'default': | |
continue | |
confirmation = raw_input('Delete {0[id]}\t{0[name]}? (enter \'Y\') '.format(sg)) | |
if confirmation == 'Y': | |
print 'Deleting security group {[id]}…'.format(sg), | |
try: | |
ec2.delete_security_group(group_id=sg['id']) | |
except Exception as e: | |
print 'Error: {}'.format(e) | |
abort = raw_input('Continue? (enter \'Y\')') | |
if abort != 'Y': | |
print 'Aborting.' | |
sys.exit(-1) | |
else: | |
print 'done.' | |
else: | |
print 'Skipping security group {[id]}.'.format(sg) | |
if not nonempty_sgs and not empty_sgs: | |
print 'No security groups found!' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment