mirror of https://github.com/apache/cloudstack.git
Temporary fix for hudson build failure. Added back the old file cloud-bridge-register.
This commit is contained in:
parent
60ec95280b
commit
2b4294d07c
|
|
@ -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)
|
||||
Loading…
Reference in New Issue