cloudstack java api_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。

cloudstack java api_python访问cloudstack的api接口_第1张图片

2.点击(账户) accounts,选择 admin,点击 users tab,找到 admin。

cloudstack java api_python访问cloudstack的api接口_第2张图片

3.可以看到 API Key 和 Security Key,如果两个框没有值,点击工具栏的钥匙小图标,“Generate Keys”,如图 。

生成秘钥:注意生成后,请不要随意修改。

cloudstack java api_python访问cloudstack的api接口_第3张图片

查看秘钥结果:

cloudstack java api_python访问cloudstack的api接口_第4张图片

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 importurllib25 importurllib6 importhashlib7 importhmac8 importbase6410 importjson11

12 defrequestUrl(url,apikey,signature,command):13 request={}14 request['command']=command15 request['apikey']=apikey16 request['response']='json' #以json方式返回结果,自己根据需求确定,如xml

17 secretkey=signature18 request_url='&'.join(['='.join([r,urllib.quote_plus(request[r])]) for r inrequest.keys()])19 sig_url='&'.join(['='.join([r.lower(),urllib.quote_plus(request[r]).lower()]) for r insorted(request.iterkeys())])20 sig=urllib.quote_plus(base64.encodestring(hmac.new(secretkey,sig_url,hashlib.sha1).digest()).strip())21 req=url+'?'+request_url+'&signature='+sig22 returnreq23 def reqresults(request_url): #取api结果参数

24 res =urllib2.urlopen(request_url)25 returnres.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。

你可能感兴趣的:(cloudstack,java,api)