python访问cloudstack的api接口
1.CloudStack API
如同 AWS API 一样,CloudStack API 也是基于 Web Service,可以使用任何一种支持 HTTP 调用的语言(例如 Java,python,)编写代码。
调用代码(caller)首先需要在管理服务器进行认证。目前 CloudStack 采用两种认证方式:
- Session 认证:通过 login API,获得一个 JSESSIONID cookie 和一个 SESSIONKEY token。
- API Key 认证。
本文代码示例采用 API Key 进行认证。其过程如下:
管理员给调用者分配 API Key 和 Security Key(由 Admin 通过 web console 或者用 registerUserKeys在程序中生成,本文是用python自己生成)。
调用者用 Security Key 以 HMAC SHA-1 哈希算法对 API Key + Command String 生成签名。
最后的 API Request=Base URL+API Path+Command String+Signature。
2.具体操作:
1.下面具体为 admin 用户生成两个 key
- 1.首先登陆管理台:http://x.x.x.x:8080/client。
2.点击(账户) accounts,选择 admin,点击 users tab,找到 admin。
3.可以看到 API Key 和 Security Key,如果两个框没有值,点击工具栏的钥匙小图标,“Generate Keys”,如图 。
生成秘钥:注意生成后,请不要随意修改。
查看秘钥结果:
4.admin 用户的api key 和security key。
apikey:xxxxxxxxaaaaaa
security key:sssssssssggggg
2.用python生成对应的访问url
注意生成时涉及到了三个点:apikey,securitykey 和command,三者其中一个变了,生成的signature就不能在用
直接上实例代码:
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 4 import urllib2 5 import urllib 6 import hashlib 7 import hmac 8 import base64
10 import json 11 12 def requestUrl(url,apikey,signature,command): 13 request={} 14 request['command']=command 15 request['apikey']=apikey 16 request['response']='json' #以json方式返回结果,自己根据需求确定,如xml 17 secretkey=signature 18 request_url='&'.join(['='.join([r,urllib.quote_plus(request[r])]) for r in request.keys()]) 19 sig_url='&'.join(['='.join([r.lower(),urllib.quote_plus(request[r]).lower()]) for r in sorted(request.iterkeys())]) 20 sig=urllib.quote_plus(base64.encodestring(hmac.new(secretkey,sig_url,hashlib.sha1).digest()).strip()) 21 req=url+'?'+request_url+'&signature='+sig 22 return req 23 def reqresults(request_url): #取api结果参数 24 res = urllib2.urlopen(request_url) 25 return res.read() 26 27 if __name__ == '__main__': 28 url = 'http://x.x.x.x:8080/client/api' 29 apikey = 'ssssssssddddd' 30 command = 'listHosts' #命令行,这个根据自己索取内容填写 31 secretkey = 'ddddddssss' 32 request_url = requestUrl(url,apikey,secretkey,command) 33 resultsNeed=json.loads(reqresults(request_url))#变成一个json对象,自己去.来.去吧!
在强调一下:
1.只是提供了一个思路,具体方式最后如何访问,自己敲定,也可以用requests。
2.接口已经打通,命令参数如下连接:http://cloudstack.apache.org/docs/api/apidocs-4.2/TOC_Root_Admin.html