Last active
August 29, 2015 14:06
-
-
Save kapilt/43c5fd350c0be9a66ac6 to your computer and use it in GitHub Desktop.
This file contains 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 | |
import argparse | |
import sys | |
import logging | |
from boto.ec2 import regions, connect_to_region | |
def main(): | |
parser = setup_parser() | |
options = parser.parse_args() | |
log = logging.getLogger("aws-gc") | |
log.setLevel(logging.DEBUG) | |
handler = logging.StreamHandler(sys.stdout) | |
handler.setLevel(logging.DEBUG) | |
handler.setFormatter(logging.Formatter("%(asctime)s %(message)s")) | |
log.addHandler(handler) | |
log.info("Garbage collecting unused security groups") | |
total = 0 | |
for region in (options.regions or regions()): | |
log.info("Processing region %s", region) | |
if isinstance(region, basestring): | |
ec2 = connect_to_region(region) | |
else: | |
ec2 = region.connect() | |
reservations = ec2.get_all_instances() | |
groups = ec2.get_all_security_groups() | |
unused = set([g.name for g in groups]) | |
if options.prefix: | |
unused = set(filter(lambda x: x.startswith(options.prefix), unused)) | |
for r in reservations: | |
for rg in r.groups: | |
if rg.name in unused: | |
unused.remove(rg.name) | |
log.info("Found %d unused groups" % (len(unused))) | |
if options.dry_run: | |
continue | |
for u in sorted(unused): | |
if str(u) == 'default': | |
continue | |
log.debug("Deleting group %s", u) | |
ec2.delete_security_group(u) | |
total += len(unused) | |
log.info("Complete (total: %d)" % total) | |
def setup_parser(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
'-o', '--owner', default="self", | |
help="Account owner (used to filter images and snapshots).") | |
parser.add_argument( | |
'-r', '--region', action="append", required=True, dest="regions", | |
help="Regions to operate, on repeat for multiples.") | |
parser.add_argument( | |
'-p', '--prefix', help="Group prefix.") | |
parser.add_argument( | |
'-d', '--dryrun', action="store_true", dest="dry_run", | |
help="Dry run application of infer tags") | |
return parser | |
if __name__ == '__main__': | |
try: | |
main() | |
except: | |
import pdb, sys, traceback | |
traceback.print_exc() | |
pdb.post_mortem(sys.exc_info()[-1]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment