Browse Source

Merge pull request #317 from jwhonce/wip/improve_reporting

Infrastructure - Validate AWS environment before calling playbooks
Jhon Honce 9 years ago
parent
commit
6ae8806216
1 changed files with 18 additions and 5 deletions
  1. 18 5
      bin/cluster

+ 18 - 5
bin/cluster

@@ -3,8 +3,9 @@
 
 import argparse
 import ConfigParser
-import sys
 import os
+import sys
+import traceback
 
 
 class Cluster(object):
@@ -141,6 +142,11 @@ class Cluster(object):
                 os.environ[key] = config.get('ec2', key)
 
             inventory = '-i inventory/aws/hosts'
+
+            missing = [key for key in ['AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY'] if key not in os.environ]
+            if len(missing) > 0:
+                raise ValueError("PROVIDER aws requires {} environment variable(s). See README_AWS.md".format(missing))
+
         elif 'libvirt' == provider:
             inventory = '-i inventory/libvirt/hosts'
         elif 'openstack' == provider:
@@ -168,7 +174,7 @@ class Cluster(object):
         if args.option:
             for opt in args.option:
                 k, v = opt.split('=', 1)
-                env['opt_'+k] = v
+                env['opt_' + k] = v
 
         ansible_env = '-e \'{}\''.format(
             ' '.join(['%s=%s' % (key, value) for (key, value) in env.items()])
@@ -290,7 +296,14 @@ if __name__ == '__main__':
             sys.stderr.write('\nACTION [update] aborted by user!\n')
             exit(1)
 
-    status = args.func(args)
-    if status != 0:
-        sys.stderr.write("ACTION [{}] failed with exit status {}\n".format(args.action, status))
+    status = 1
+    try:
+        status = args.func(args)
+        if status != 0:
+            sys.stderr.write("ACTION [{}] failed with exit status {}\n".format(args.action, status))
+    except Exception, e:
+        if args.verbose:
+            traceback.print_exc(file=sys.stderr)
+        else:
+            sys.stderr.write("{}\n".format(e))
     exit(status)