71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
#!/usr/bin/env python
|
|
# 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())
|
|
|
|
|
|
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, e:
|
|
print e
|
|
help(cf, cmd.__name__)
|