分享

Openstack rest API 操作实例

xioaxu790 发表于 2014-11-27 21:26:57 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 68363
本帖最后由 pig2 于 2014-11-27 23:34 编辑
问题导读

1、如何验证API是否正常工作?

2、怎样搭建Openstack API 开发环境?
3、JSON如何格式化?





Openstack 做为流行的开源云计算平台,其最大特性是利用其提供的基础设施API,让我们可以以软件的方式来动态管理IAAS资源。Openstack 提供的api是流行的Rest API。

    闲话少说,我们来开始使用Openstack API。

   前提:搭建Openstack 环境是必须,可以根据参考资料搭建一个单机虚拟机环境.

   假设我们搭建的环境信息为:

物理服务器地址: 192.168.1.1
管理员用户名:admin
管理员密码:password
管理员租户ID:3942bfc544a24f748788c06dbc486ffa


   做好环境后,我们先验证一下,API是否正常工作.使用Curl工具验证;
  1. curl -k -X 'POST' -v http://192.168.1.1:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "admin", "password":"password"}, "tenantId":"3942bfc544a24f748788c06dbc486ffa"}}' -H 'Content-type: application/json'
复制代码


需要的是前面几行:
  1. {"access": {"token": {"expires": "2013-01-23T02:22:40Z", "id": "dba0a6722b86483e83b07e5556bafb02"...
复制代码


其中的ID一项,即为我们以后认证需要的token,记下来:
  1. X-Auth-Token:dba0a6722b86483e83b07e5556bafb02
复制代码



其它的server 及region信息,是根据你的keystone配置,会将各个服务的访问地址(endpoint)列出来,你可以从这里获得Image,compute,volume等API接口访问地址.

特别提醒:
认证的请求json字符串正确格式为:

  1. {
  2.     "auth":{
  3.         "passwordCredentials":{
  4.             "username":"admin",
  5.             "password":"password"
  6.         },
  7.         "tenantId":"3942bfc544a24f748788c06dbc486ffa"
  8.     }
  9. }
复制代码

缺少了tenantId选项依然可以获得token ,然而这样的token只能在keystone组件中使用,当使用此token去nova 或者image组件认证时,会失败(401错误)

而截止目前,官方api文档http://api.openstack.org/api-ref.html
1.png

tenantName (可选项),按此文档请求会出现token不能在其它组件中认证的情况.

获得正确的的tokens后,便可以参考官方的api参考页面,测试其它的api了.
如instance  列表:
  1. curl -v -H "X-Auth-Token:dba0a6722b86483e83b07e5556bafb02" http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa/servers
复制代码

curl毕竟是命令行,比较麻烦,大家可以使用rest客户端去操作。这里推存一个JAVA的:


https://code.google.com/p/rest-client/
1.png


下面我们通过API完成创建一个虚拟机的工作.

第一步:获取镜像列表:
协议为 GET http://192.168.1.1:9292/v1/images
这里使用Rest-client提交
1.png

我们选一个镜像id: 03419abb-c27f-4dde-bc74-b8387d1ccb30

第二步:获取虚拟机创建方案.
协议为: GET http://192.168.1.1:8774/v2/3942b ... 06dbc486ffa/flavors

使用rest-client请求:
1.png

选取一个flavorid:100

第三步,创建虚拟机
协议:POST http://192.168.1.1:8774/v2/3942b ... 06dbc486ffa/servers
BODY:

  1. {
  2.     "server":{
  3.         "flavorRef":"100",
  4.         "imageRef":"03419abb-c27f-4dde-bc74-b8387d1ccb30",
  5.         "metadata":{
  6.             "My Server Name":"Apache1"
  7.         },
  8.         "name":"new-server-test",
  9.         "personality":[
  10.             {
  11.                 "contents":"",
  12.                 "path":"/etc/banner.txt"
  13.             }
  14.         ]
  15.     }
  16. }
复制代码

restclient 请求:
1.png

由于我的虚拟机资源用限,超出容量,所以创建失败了。成功的请求是这样的

  1. {
  2.     "server":{
  3.         "adminPass":"MVk5HPrazHcG",
  4.         "id":"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
  5.         "links":[
  6.             {
  7.                 "href":"http://openstack.example.com/v2/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
  8.                 "rel":"self"
  9.             },
  10.             {
  11.                 "href":"http://openstack.example.com/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
  12.                 "rel":"bookmark"
  13.             }
  14.         ]
  15.     }
  16. }
复制代码

结果可以登录http://192.168.1.1
用openstack 的Horizon的验证。
其它的api可以参考Openstack的文档完成了 http://api.openstack.org

常用工具

JSON格式化
  1.     <http://www.cnblogs.com/biangbiang/archive/2013/01/11/2856431.html>
  2. Java REST Client
  3.     <http://rest-client.googlecode.com/>
  4. Groovy RESTCLIENT (groovyx.net.http.RESTClient)   
  5.     <http://groovy.codehaus.org/modules/http-builder/doc/rest.html>
  6. HttpClient入门
  7.     <http://www.ibm.com/developerworks/cn/opensource/os-httpclient/>
  8.     <http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html>
复制代码





已有(2)人评论

跳转到指定楼层
CoderDream 发表于 2015-1-27 20:40:30
非常不错,感谢楼主分享!
回复

使用道具 举报

Libra0507 发表于 2015-6-24 22:00:57
不错,很具体
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条