Mercurial > repos > guerler > springsuite
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__) |