secretsfile = basefp.child('secrets').child(logfilename).open('a+') logfile = basefp.child('signup_logs').child(logfilename).open('a+') stdin = sys.stdin stdout = LoggingTeeStream(sys.stdout, logfile, '>') stderr = LoggingTeeStream(sys.stderr, logfile, '') # This is to work around the fact that fabric echoes all commands and output to sys.stdout. # It does have a way to disable that, but not (easily) to redirect it. sys.stdout = stderr def _close(res): stdout.flush() stderr.flush() secretsfile.close() logfile.close() return res def _err(f): print >>stderr, str(f) if hasattr(f.value, 'response'): print >>stderr, f.value.response print >>stdout, "%s: %s" % (f.value.__class__.__name__, f.value) return f d = defer.succeed(None) d.addCallback(lambda ign: replace_server(oldsecrets, amiimageid, instancesize, customer_email, stdout, stderr, secretsfile, logfilename)) d.addErrback(_err) d.addBoth(_close) d.addCallbacks(lambda ign: os._exit(0), lambda ign: os._exit(1)) reactor.run()
old_ssec2_secrets_path = sys.argv[2] old_ssec2_secrets = simplejson.loads(FilePath(old_ssec2_secrets_path).getContent()) # TODO: ideally these would be in the secrets file. amiimageid = sys.argv[3] instancesize = sys.argv[4] customer_email = sys.argv[5] def _close(res): sys.stdout.flush() sys.stderr.flush() signup_log_fp.open().close() stripesecrets_log_fp.open().close() SSEC2secrets_log_fp.open().close() return res def _err(f): print >>sys.stderr, str(f) if hasattr(f.value, 'response'): print >>sys.stderr, f.value.response print >>sys.stdout, "%s: %s" % (f.value.__class__.__name__, f.value) return f d = defer.succeed(None) d.addCallback(lambda ign: replace_server(old_ssec2_secrets, amiimageid, instancesize, customer_email, signup_stdout, signup_stderr, SSEC2_secretsfile, signup_logfile)) d.addErrback(_err) d.addBoth(_close) d.addCallbacks(lambda ign: os._exit(0), lambda ign: os._exit(1)) reactor.run()