comparison planemo/bin/cfadmin @ 0:d30785e31577 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:18:57 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d30785e31577
1 #!/Users/guerler/spring/springsuite/planemo/bin/python3
2 # Author: Chris Moyer
3 #
4 # cfadmin is similar to sdbadmin for CloudFront, it's a simple
5 # console utility to perform the most frequent tasks with CloudFront
6 #
7 def _print_distributions(dists):
8 """Internal function to print out all the distributions provided"""
9 print "%-12s %-50s %s" % ("Status", "Domain Name", "Origin")
10 print "-"*80
11 for d in dists:
12 print "%-12s %-50s %-30s" % (d.status, d.domain_name, d.origin)
13 for cname in d.cnames:
14 print " "*12, "CNAME => %s" % cname
15 print ""
16
17 def help(cf, fnc=None):
18 """Print help message, optionally about a specific function"""
19 import inspect
20 self = sys.modules['__main__']
21 if fnc:
22 try:
23 cmd = getattr(self, fnc)
24 except:
25 cmd = None
26 if not inspect.isfunction(cmd):
27 print "No function named: %s found" % fnc
28 sys.exit(2)
29 (args, varargs, varkw, defaults) = inspect.getargspec(cmd)
30 print cmd.__doc__
31 print "Usage: %s %s" % (fnc, " ".join([ "[%s]" % a for a in args[1:]]))
32 else:
33 print "Usage: cfadmin [command]"
34 for cname in dir(self):
35 if not cname.startswith("_"):
36 cmd = getattr(self, cname)
37 if inspect.isfunction(cmd):
38 doc = cmd.__doc__
39 print "\t%s - %s" % (cname, doc)
40 sys.exit(1)
41
42 def ls(cf):
43 """List all distributions and streaming distributions"""
44 print "Standard Distributions"
45 _print_distributions(cf.get_all_distributions())
46 print "Streaming Distributions"
47 _print_distributions(cf.get_all_streaming_distributions())
48
49 def invalidate(cf, origin_or_id, *paths):
50 """Create a cloudfront invalidation request"""
51 # Allow paths to be passed using stdin
52 if not paths:
53 paths = []
54 for path in sys.stdin.readlines():
55 path = path.strip()
56 if path:
57 paths.append(path)
58 dist = None
59 for d in cf.get_all_distributions():
60 if d.id == origin_or_id or d.origin.dns_name == origin_or_id:
61 dist = d
62 break
63 if not dist:
64 print "Distribution not found: %s" % origin_or_id
65 sys.exit(1)
66 cf.create_invalidation_request(dist.id, paths)
67
68 def listinvalidations(cf, origin_or_id):
69 """List invalidation requests for a given origin"""
70 dist = None
71 for d in cf.get_all_distributions():
72 if d.id == origin_or_id or d.origin.dns_name == origin_or_id:
73 dist = d
74 break
75 if not dist:
76 print "Distribution not found: %s" % origin_or_id
77 sys.exit(1)
78 results = cf.get_invalidation_requests(dist.id)
79 if results:
80 for result in results:
81 if result.status == "InProgress":
82 result = result.get_invalidation_request()
83 print result.id, result.status, result.paths
84 else:
85 print result.id, result.status
86
87
88 if __name__ == "__main__":
89 import boto
90 import sys
91 cf = boto.connect_cloudfront()
92 self = sys.modules['__main__']
93 if len(sys.argv) >= 2:
94 try:
95 cmd = getattr(self, sys.argv[1])
96 except:
97 cmd = None
98 args = sys.argv[2:]
99 else:
100 cmd = help
101 args = []
102 if not cmd:
103 cmd = help
104 try:
105 cmd(cf, *args)
106 except TypeError as e:
107 print e
108 help(cf, cmd.__name__)