You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

#!/ usr/bin/env python

  1. By: Kelcey Damage, 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

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)

  1. The response is of the format
    Unknown macro: {commandresponse}
    key = command.lower() + "response"
    return json.loads(data)[key]

api = CloudStack(api_url, apiKey, secret)

request =

Unknown macro: {'listall'}

result = api.listVirtualMachines(request)
print "count", result['count']
print "api url", api.value

  • No labels