Mercurial > repos > guerler > springsuite
diff planemo/bin/cfadmin @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/bin/cfadmin Fri Jul 31 00:18:57 2020 -0400 @@ -0,0 +1,108 @@ +#!/Users/guerler/spring/springsuite/planemo/bin/python3 +# Author: Chris Moyer +# +# cfadmin is similar to sdbadmin for CloudFront, it's a simple +# console utility to perform the most frequent tasks with CloudFront +# +def _print_distributions(dists): + """Internal function to print out all the distributions provided""" + print "%-12s %-50s %s" % ("Status", "Domain Name", "Origin") + print "-"*80 + for d in dists: + print "%-12s %-50s %-30s" % (d.status, d.domain_name, d.origin) + for cname in d.cnames: + print " "*12, "CNAME => %s" % cname + print "" + +def help(cf, fnc=None): + """Print help message, optionally about a specific function""" + import inspect + self = sys.modules['__main__'] + if fnc: + try: + cmd = getattr(self, fnc) + except: + cmd = None + if not inspect.isfunction(cmd): + print "No function named: %s found" % fnc + sys.exit(2) + (args, varargs, varkw, defaults) = inspect.getargspec(cmd) + print cmd.__doc__ + print "Usage: %s %s" % (fnc, " ".join([ "[%s]" % a for a in args[1:]])) + else: + print "Usage: cfadmin [command]" + for cname in dir(self): + if not cname.startswith("_"): + cmd = getattr(self, cname) + if inspect.isfunction(cmd): + doc = cmd.__doc__ + print "\t%s - %s" % (cname, doc) + sys.exit(1) + +def ls(cf): + """List all distributions and streaming distributions""" + print "Standard Distributions" + _print_distributions(cf.get_all_distributions()) + print "Streaming Distributions" + _print_distributions(cf.get_all_streaming_distributions()) + +def invalidate(cf, origin_or_id, *paths): + """Create a cloudfront invalidation request""" + # Allow paths to be passed using stdin + if not paths: + paths = [] + for path in sys.stdin.readlines(): + path = path.strip() + if path: + paths.append(path) + dist = None + for d in cf.get_all_distributions(): + if d.id == origin_or_id or d.origin.dns_name == origin_or_id: + dist = d + break + if not dist: + print "Distribution not found: %s" % origin_or_id + sys.exit(1) + cf.create_invalidation_request(dist.id, paths) + +def listinvalidations(cf, origin_or_id): + """List invalidation requests for a given origin""" + dist = None + for d in cf.get_all_distributions(): + if d.id == origin_or_id or d.origin.dns_name == origin_or_id: + dist = d + break + if not dist: + print "Distribution not found: %s" % origin_or_id + sys.exit(1) + results = cf.get_invalidation_requests(dist.id) + if results: + for result in results: + if result.status == "InProgress": + result = result.get_invalidation_request() + print result.id, result.status, result.paths + else: + print result.id, result.status + + +if __name__ == "__main__": + import boto + import sys + cf = boto.connect_cloudfront() + self = sys.modules['__main__'] + if len(sys.argv) >= 2: + try: + cmd = getattr(self, sys.argv[1]) + except: + cmd = None + args = sys.argv[2:] + else: + cmd = help + args = [] + if not cmd: + cmd = help + try: + cmd(cf, *args) + except TypeError as e: + print e + help(cf, cmd.__name__)