用 CloudStack 配置和管理一个简单云(3)

使用 CloudStack API

如同 AWS API 一样,CloudStack API 也是基于 Web Service,可以使用任何一种支持 HTTP 调用的语言(例如 Java,PHP)编写代码。

调用代码(caller)首先需要在管理服务器进行认证。目前 CloudStack 采用两种认证方式:

Session 认证:通过 login API,获得一个 JSESSIONID cookie 和一个 SESSIONKEY token。

API Key 认证。

本文代码示例采用 API Key 进行认证。其过程如下:

管理员给调用者分配 API Key 和 Security Key(由 Admin 通过 web console 或者用 registerUserKeys在程序中生成)。

调用者用 Security Key 以 HMAC SHA-1 哈希算法对 API Key + Command String 生成签名。

最后的 API Request=Base URL+API Path+Command String+Signature。

下面具体为 admin 用户生成两个 key:

首先登陆管理台::8080/client。

点击 accounts,选择 admin,点击 users tab,找到 admin。

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


图 16. 生成 API Key 和 Security Key

图 16. 生成 API Key 和 Security Key

两个 Key 的生成结果如下:


表 3.Admin 用户的 API Key 和 Security Key

API Key Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w  
Security Key YaCSGzL9PvadlW4CDxH-k5QDAN8pDjPK7V5NZdvnIvJnzf_TKXg_OPXg616FM5k8yuYeyWkltMgugsbma9Hl0A  

接下来用 CloudStack 的 Restful API 生成一个虚拟机。其调用 URL 如下:

:8080/client/api?command=deployVirtualMachine& serviceofferingid=1&templateid=4&zoneid=1  

command 参数中的内容可以参阅 API Reference: CloudStack,此处不赘述。需要注意的是,URL 当中每个参数是按照字母顺序排列的,这是生成签名必要的。

下面演示如何生成签名并组装一个完整的 URL。

首先在此处下载一段 perl 脚本,我们要利用它来帮助生成签名。将它放入合适的目录,然后在命令行下键入:

$ ./generate-url.pl –f 1 -u "command=deployvirtualmachine&serviceofferingid=1&templateid=4&zoneid=1" -a TEBBqfXkV-9blsxpkjFLAxNUmnvMsFEq7WKwPOMT_nuce69bmcElXz1izsN1qJFK58ye5U5hWWN2ckscsysodg – s 7VJx0QfxvJQZBYZbLdct2QFck8lV6hwLMvo9YCJ97pVou8f_aDSHdhEqBaY2CtFI6_MULP0eYqr_Z7D2Jon8nQ  

-f 后面数字 1 是生成 url 的意思,-a 后面是 API Key,-s 后面是 Security Key。-u 后面的 command 参数都已经修改为小写字母(此步不可省略)。命令运行完毕生成一段字符串:

*.*.*.*/client/api?command=deployvirtualmachine&serviceofferingid=1 &zoneid=1&templateid=4&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4 GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG 6EosCcRGvO7OWU%3D  

然后把 IP 替换入上面 url,并把 command 中的小写字母还原成原来正确的 API 名字,结果如下:

:8080/client/api?command=listVirtualMachines&account=admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=i5%2FQxBf7FIGc6GvAfNcpFnVKpEw%3D  

把该 URL 键入浏览器,可以执行成功,返回一段 XML response:

<deployvirtualmachineresponse cloud-stack-version="3.0.2.20120506223416"> <id>d29a98f2-610c-4e4e-9331-18c133c5bdb3</id> <jobid>a5c9f26d-98be-4a81-9883-da9dd8dfda47</jobid> </deployvirtualmachineresponse>  

如果回到控制台界面的 instance tab,可以看到一个新的 vm instance 被创建。

用同样的方法,使用如下命令,列举出 Admin 用户下的全部虚拟机。

:8080/client/api?command=listVirtualMachines&account= admin&amp;domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG6EosCcRGvO7OWU%3D  

Q10CentOS 需要安装 perl 开发环境才能运行上面的脚本。如果在命令执行过程中出现类似 cannot locate WWW/Mechanize 类的错误,需要先安装 cpan:

yum install cpan

然后用 cpan 安装缺少的 module:

cpan install WWW::Mechanize

后面缺少哪个 module,就用 cpan 安装该 module,直到所使用的包都被装入。

总体而言,CloudStack 的 API 提供了很灵活和强大的功能,而且通过 CloudBridge,更是实现了与亚马逊 EC2 API 的兼容。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/04ed167959e2cd6ff6599cce017def2a.html