DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.

DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
Available for download at: GITHUB Download
| Code Block | ||||
|---|---|---|---|---|
| ||||
|
#!/usr/bin/env python |
...
# By: Kelcey Damage, |
...
import hashlib, hmac, string. base64, urllib
# Reference GET/POST sample request
## 1. http://10.10.0.1:8080/client/api
# 2. ?apiKey=API_KEY
# 3. &command=API_COMMAND
# 4. &response=JSON/XML
# 5. &zoneid=ZONE_ID
# 6. &signature=SIGNATURE
# Reference required signature elements
## 1. request# 2. apiKey# 3. private_key
api_url = 'http://10.10.0.1:8080/client/api'
secret = Secret Key
apiKey = API Key
request = {'command': 'restartNetwork', 'id': '214', 'response': 'json'}
class SignedAPICall(Object):
def _init_(self, api_url, apikey,, secret):
self.api_url = api_url
self.apikey = apiKey
self.secret = secret
...
2012 & Kraig Amador, 2012 api_url = 'your_stuff_here' apiKey = 'your_stuff_here' secret = 'your_stuff_here' import hashlib, hmac, string, base64, urllib import json, urllib class SignedAPICall(object): def __init__(self, api_url, apiKey, secret): self.api_url = api_url self.apiKey = apiKey self.secret = secret def request(self, args): |
...
args['apiKey' |
...
] = self.apiKey |
...
self.params = |
...
[ |
...
] |
...
self._sort_request(args) |
...
self._ |
...
create_signature() |
...
self._build_post_request() |
...
def _sort_request(self, args): |
...
keys = sorted(args.keys()) |
...
for key in keys: |
...
self.params.append(key + '=' + urllib.quote_plus(args |
...
[key |
...
])) |
...
def _create_signature(self): |
...
self.query = '&'.join(self.params) |
...
digest = hmac.new( |
...
self.secret, msg=self.query.lower(), |
...
digestmod=hashlib.sha1).digest() |
...
self.signature = base64.b64encode(digest) |
...
def _build_post_request(self): |
...
self.query += '&signature=' + urllib.quote_plus(self.signature) |
...
self.value = self.api_url + '?' + self.query |
...
api = SignedAPICall(api_url, apiKey,, secret)
api.request(request)
print api.value
# Example Usage:
# api.value is a debug that holds the complete valid URL request.
...
class CloudStack(SignedAPICall):
def __getattr__(self, name):
def handlerFunction(*args, **kwargs):
if kwargs:
return self._make_request(name, kwargs)
return self._make_request(name, args[0])
return handlerFunction
def _http_get(self, url):
response = urllib.urlopen(url)
return response.read()
def _make_request(self, command, args):
args['response'] = 'json'
args['command'] = command
self.request(args)
data = self._http_get(self.value)
# The response is of the format {commandresponse: actual-data}
key = command.lower() + "response"
return json.loads(data)[key]
#Usage
#api = CloudStack(api_url, apiKey, secret)
#request = {'listall': 'true'}
#result = api.listVirtualMachines(request)
#print "count", result['count']
#print "api url", api.value
|