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 | ||||
|---|---|---|---|---|
| ||||
#!/ | ||||
| Wiki Markup | ||||
[DOWNLOAD AS A FILE|^cs_api_request_client.py] {{\#\!/ usr/bin/env python}} {{\# By: Kelcey Damage, 2012}} {{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{_}{}}}{{\ & 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, apikeyapiKey,, secret):}} {{ self.api_url = api_url}} {{ self.apikey self.apiKey = apiKey}} {{ self.secret = secret}} {{ def request(self, args):}} {{ args\ args['apiKey'\] = self.apiKey}} {{ self.params = \[\]}} {{ self._sort_request(args)}} {{ self._creatcreate_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 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)}} {{api.request #request = {'listall': 'true'} #result = api.listVirtualMachines(request)}} {{print #print "count", result['count'] #print "api url", api.value}} |