From 2b4294d07c5b4f3cac93288cdccece537cd96826 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Thu, 17 May 2012 14:34:24 +0530 Subject: [PATCH] Temporary fix for hudson build failure. Added back the old file cloud-bridge-register. --- awsapi-setup/setup/cloud-bridge-register | 76 ++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 awsapi-setup/setup/cloud-bridge-register diff --git a/awsapi-setup/setup/cloud-bridge-register b/awsapi-setup/setup/cloud-bridge-register new file mode 100644 index 00000000000..83425b61b2a --- /dev/null +++ b/awsapi-setup/setup/cloud-bridge-register @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import base64 +import hmac +import os +import sys +import urllib2 +import urllib +import httplib +from datetime import datetime +from optparse import OptionParser +from urlparse import urlparse + +try: + from hashlib import sha1 as sha +except ImportError: + import sha + +def get_signature(key, url, query): + netloc, path = urlparse(url)[1:3] + return urllib.quote_plus(base64.b64encode( + hmac.new(key, '\n'.join(['GET', netloc, path, query]), sha).digest())) + +def get_url(url, api_key, secret_key, action, query): + amzn_string = 'AWSAccessKeyId=' + api_key + '&Action=' + action + '&SignatureMethod=HmacSHA1' + amzn_string += '&SignatureVersion=2&Timestamp='+ datetime.now().isoformat()[:19] +'Z&Version=2010-11-15' + query = amzn_string + '&' + query + url = url + '?' + query + '&Signature=' + get_signature(secret_key, url, query) + try: + urllib2.urlopen(url) + if action == 'SetCertificate': + print 'User registration is successful!' + return True + except urllib2.HTTPError, e: + print 'User registration failed with http error code:' , e.code + return False + except urllib2.URLError, e: + print 'User registration failed with error: ' , e.reason + return False + + +def register(url, api_key, secret_key, cert): + # Register API keys + query = 'accesskey=' + api_key + '&secretkey=' + secret_key + result = get_url(url, api_key, secret_key, 'SetUserKeys', query) + + if result == True: + # Tie Certifcate to API keys + query = 'cert=' + urllib.quote_plus(cert) + get_url(url, api_key, secret_key, 'SetCertificate', query) + + +def get_opts(): + parser = OptionParser() + parser.add_option('-a', '--apikey') + parser.add_option('-s', '--secretkey') + parser.add_option('-c', '--cert', help='Name of a file containing an X.509 certificate') + parser.add_option('-u', '--url', help='CloudStack AWSAPI URL, eg. http://cloudstack.host:8080/awsapi') + (options, args) = parser.parse_args() + if None in [options.apikey, options.secretkey, options.cert, options.url]: + print 'Error: Missing argument\n' + parser.print_help() + sys.exit(1) + return options + +def validate_opts(options): + if not os.path.isfile(options.cert): + print 'Error reading file: ' + options.cert + sys.exit(1) + f = open(options.cert) + options.cert = f.read() + return options + +if __name__ == '__main__': + opts = validate_opts(get_opts()) + register(opts.url, opts.apikey, opts.secretkey, opts.cert)