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

    闲话少说,我们来开始使用Openstack API。
   
   前提:搭建Openstack 环境是必须,可以根据参考资料搭建一个单机虚拟机环境.
 
   假设我们搭建的环境信息为:

物理服务器地址: 192.168.1.1
管理员用户名:admin
管理员密码:password
管理员租户ID:3942bfc544a24f748788c06dbc486ffa
 
   做好环境后,我们先验证一下,API是否正常工作.使用Curl工具验证;
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'

返回一串的json字符串:

 {
"access" : {
"token" : {
"expires" : "2013-01-23T04:26:01Z",
"id" : "9bc5f651f5ff44329f67a5a33486fcf4",
"tenant" : {
"description" : null,
"enabled" : true,
"id" : "3942bfc544a24f748788c06dbc486ffa",
"name" : "admin"
}
},
"serviceCatalog" : [ {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa",
"publicURL" : "http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa"
} ],
"endpoints_links" : [ ],
"type" : "compute",
"name" : "nova"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:9696/",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:9696/",
"publicURL" : "http://192.168.1.1:9696/"
} ],
"endpoints_links" : [ ],
"type" : "network",
"name" : "quantum"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:9292/v2",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:9292/v2",
"publicURL" : "http://192.168.1.1:9292/v2"
} ],
"endpoints_links" : [ ],
"type" : "image",
"name" : "glance"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:8776/v1/3942bfc544a24f748788c06dbc486ffa",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:8776/v1/3942bfc544a24f748788c06dbc486ffa",
"publicURL" : "http://192.168.1.1:8776/v1/3942bfc544a24f748788c06dbc486ffa"
} ],
"endpoints_links" : [ ],
"type" : "volume",
"name" : "cinder"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:8773/services/Admin",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:8773/services/Cloud",
"publicURL" : "http://192.168.1.1:8773/services/Cloud"
} ],
"endpoints_links" : [ ],
"type" : "ec2",
"name" : "ec2"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:8080/v1",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:8080/v1/AUTH_3942bfc544a24f748788c06dbc486ffa",
"publicURL" : "http://192.168.1.1:8080/v1/AUTH_3942bfc544a24f748788c06dbc486ffa"
} ],
"endpoints_links" : [ ],
"type" : "object-store",
"name" : "swift"
}, {
"endpoints" : [ {
"adminURL" : "http://192.168.1.1:35357/v2.0",
"region" : "RegionOne",
"internalURL" : "http://192.168.1.1:5000/v2.0",
"publicURL" : "http://192.168.1.1:5000/v2.0"
} ],
"endpoints_links" : [ ],
"type" : "identity",
"name" : "keystone"
} ],
"user" : {
"username" : "admin",
"roles_links" : [ ],
"id" : "89b0ec701354421fa2284667d4175af7",
"roles" : [ {
"id" : "12833eaa4ff14e8ea1e1c2f96ea6f18d",
"name" : "KeystoneServiceAdmin"
}, {
"id" : "31e298db6ece43c2b85f21f2a696809e",
"name" : "admin"
}, {
"id" : "8cc376e9218a4068af4cb5a923c0f201",
"name" : "KeystoneAdmin"
}, {
"id" : "bb4d1cf04bcb4be59bb2b78f9a273a9c",
"name" : "ResellerAdmin"
} ],
"name" : "admin"
}
}
}

需要的是前面几行:

{"access": {"token": {"expires": "2013-01-23T02:22:40Z", "id": "dba0a6722b86483e83b07e5556bafb02"...

其中的ID一项,即为我们以后认证需要的token,记下来:

X-Auth-Token:dba0a6722b86483e83b07e5556bafb02
 
其它的server 及region信息,是根据你的keystone配置,会将各个服务的访问地址(endpoint)列出来,你可以从这里获得Image,compute,volume等API接口访问地址.
 
特别提醒:
认证的请求json字符串正确格式为:
{
"auth":{
"passwordCredentials":{
"username":"admin",
"password":"password"
},
"tenantId":"3942bfc544a24f748788c06dbc486ffa"
}
}

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

而截止目前,官方api文档http://api.openstack.org/api-ref.html 为
 
   tenantName (可选项),按此文档请求会出现token不能在其它组件中认证的情况.
 
获得正确的的tokens后,便可以参考官方的api参考页面,测试其它的api了.
如instance  列表:
curl -v -H "X-Auth-Token:dba0a6722b86483e83b07e5556bafb02" http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa/servers

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

 
 
下面我们通过API完成创建一个虚拟机的工作.
 
第一步:获取镜像列表:
协议为 GET http://192.168.1.1:9292/v1/images
这里使用Rest-client提交
我们选一个镜像id: 03419abb-c27f-4dde-bc74-b8387d1ccb30
 
第二步:获取虚拟机创建方案.
协议为: GET http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa/flavors
 
使用rest-client请求:
选取一个flavorid:100
 
第三步,创建虚拟机
协议:POST http://192.168.1.1:8774/v2/3942bfc544a24f748788c06dbc486ffa/servers
BODY:
{
"server":{
"flavorRef":"100",
"imageRef":"03419abb-c27f-4dde-bc74-b8387d1ccb30",
"metadata":{
"My Server Name":"Apache1"
},
"name":"new-server-test",
"personality":[
{
"contents":"",
"path":"/etc/banner.txt"
}
]
}
}
restclient 请求:
由于我的虚拟机资源用限,超出容量,所以创建失败了。成功的请求是这样的
{
"server":{
"adminPass":"MVk5HPrazHcG",
"id":"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
"links":[
{
"href":"http://openstack.example.com/v2/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
"rel":"self"
},
{
"href":"http://openstack.example.com/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9",
"rel":"bookmark"
}
]
}
}
结果可以登录http://192.168.1.1
用openstack 的Horizon的验证。
其它的api可以参考Openstack的文档完成了 http://api.openstack.org
 
常用工具
 
JSON格式化
    <http://www.cnblogs.com/biangbiang/archive/2013/01/11/2856431.html>
Java REST Client
    <http://rest-client.googlecode.com/>
Groovy RESTCLIENT (groovyx.net.http.RESTClient)    
    <http://groovy.codehaus.org/modules/http-builder/doc/rest.html>
HttpClient入门
    <http://www.ibm.com/developerworks/cn/opensource/os-httpclient/>
    <http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html>
 

Openstack API 开发 快速入门的更多相关文章

  1. Transform组件C#游戏开发快速入门

    Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸   ...

  2. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

  3. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  4. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...

  5. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  6. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  7. SpringBoot开发快速入门

    SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...

  8. WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...

  9. abp vnext 开发快速入门 1 认识框架

    最近在做一个项目,用的框架是Abp vnext ,不是Abp, 我自己也是刚开始用这个框架来做项目,难免要查资料,这个框架官方有中文文档,可以到官网www.abp.io 去查看,国内也有一些写了相关的 ...

随机推荐

  1. HDU 1828 Picture (线段树:扫描线周长)

    依然是扫描线,只不过是求所有矩形覆盖之后形成的图形的周长. 容易发现,扫描线中的某一条横边对答案的贡献. 其实就是 加上/去掉这条边之前的答案 和 加上/去掉这条边之后的答案 之差的绝对值 然后横着竖 ...

  2. adb 相关问题总结

    1. adb shell权限问题$ su //root权限来启动adb server$ adb kill-server && adb start-server* daemon not ...

  3. 聚类(Clustering)

    简介 相对于决策树.朴素贝叶斯.SVM等有监督学习,聚类算法属于无监督学习. 有监督学习通常根据数据集的标签进行分类,而无监督学习中,数据集并没有相应的标签,算法仅根据数据集进行划分. 由于具有出色的 ...

  4. nutch如何修改regex-urlfilter.txt爬取符合条件的链接

    例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...

  5. angular-输入验证

    $dirty 表单有填写记录 $valid 字段内容合法的 $invalid 字段内容是非法的 $pristine 表单没有填写记录 客户端的验证不能确保用户输入数据的安全,所以服务端的数据验证也是必 ...

  6. jquery mobile常用的data-role类型介绍

    转自原文 jquery mobile常用的data-role类型介绍 data-role参数表: page        页面容器,其内部的mobile元素将会继承这个容器上所设置的属性 header ...

  7. xcode5.1生成framework,支持arm64报错

    错误例如以下: ld: Assertion failed: (_machoSection != 0), function machoSection, file /SourceCache/ld64/ld ...

  8. UVA 11077 Find the Permutations 递推置换

                               Find the Permutations Sorting is one of the most used operations in real ...

  9. Testbench的编写

    Testbench的作用,在于给我们编写的可综合代码的模块送入激励.即在我们波形仿真中用编写testbench来代替拖拽波形.其中还包括了我们硬件仿真与matlab仿真的联调建立(将matlab产生的 ...

  10. ios修改了coredata数据结构后,更新安装会闪退

    如果iOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下: 1.选中你的mydata.xc ...