Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档
转载请注明http://www.cnblogs.com/juandx/p/4943409.html
这篇文档总结一下我初步学习Openstack的api,并且趁这个机会学习一下Firefox的restclient客户端。
一、使用curl命名来使用openstack的api
当然,首先你得有个openstack的环境,我是自己搭建的kilo,我们先用curl来使用api,注意自己改一下ip还有用户名和密码,下面这个命令就会得到一个令牌(token)来使用,以后调用api就需要使用这个令牌。
curl -k -X 'POST' -v http://controller_ip:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "ADMIN", "password":"MY_PASSWORD"}}}' -H 'Content-type: application/json' | python -mjson.tool
这样后会得到如下的json数据
{
"access": {
"metadata": {
"is_admin": 0,
"roles": []
},
"serviceCatalog": [],
"token": {
"audit_ids": [
"WPon6i60TamUfqcsPV2oVg"
],
"expires": "2015-11-06T11:19:19Z",
"id": "bc422dc370324535a64699640f50a3ab",//这个id就是令牌(token)
"issued_at": "2015-11-06T10:19:19.559266"
},
"user": {
"id": "9c20d9fe21a14741ac1486b2db058bd5",
"name": "admin",
"roles": [],
"roles_links": [],
"username": "admin"
}
}
}
下面得到这个用户的所有项目(tenant),注意下面的token就是刚刚得到的那个令牌
curl -X 'GET' -H "X-Auth-Token:bc422dc370324535a64699640f50a3ab" -v http://controller_ip:5000/v2.0/tenants | python -mjson.tool
这里面得到这个用户的项目(tenant)
{
"tenants": [
{
"description": null,
"enabled": true,
"id": "92afd13a680645c191a2aab7422a7a3b",
"name": "AIM"
},
{
"description": null,
"enabled": true,
"id": "b3457999de4d4add99e89f4f299f5857",
"name": "ECM"
},
{
"description": "Admin Project",
"enabled": true,
"id": "de8f43bfe4244a1aa315a70a43248d60",
"name": "admin"
},
{
"description": null,
"enabled": true,
"id": "f3c1015ff67e4cd18b022b9b51eb1123",
"name": "IM"
},
{
"description": null,
"enabled": true,
"id": "fae79b8f91b944b985d2b35373cf9bb2",
"name": "Commerce"
}
],
"tenants_links": []
}
可以看到我这里ADMIN用户总共有5个tenant,我们选取一个即可,就选取名为admin的项目,id看到为de8f43bfe4244a1aa315a70a43248d60
接下来我们去一个项目(tenant)看看它的虚拟机、等信息。
首先需要得到这个tenant的令牌信息,注意这个token和上面的那个不一样
curl -k -X 'POST' -v http://controller_ip:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "ADMIN", "password":"MY_PASSWORD"},"tenantId":"de8f43bfe4244a1aa315a70a43248d60"}}' -H 'Content-type: application/json' | python -mjson.tool
注意这里看到用户名和密码还是和之前一样,但是多了一个tenantId的字段,这里说明了我们需要的是ADMIN用户下的这个项目的令牌,得到如下信息:
{
"access": {
"metadata": {
"is_admin": 0,
"roles": [
"cf87d1b66b044cdd94972d72d6e4d474"
]
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://controller:9292",
"id": "5f892fde3a2241c989355cdd6beea4b5",
"internalURL": "http://controller:9292",
"publicURL": "http://controller:9292",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "glance",
"type": "image"
},
{
"endpoints": [
{
"adminURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
"id": "0c52d8a741f740a6b83be51ae7082b62",
"internalURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
"publicURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "nova",
"type": "compute"
},
{
"endpoints": [
{
"adminURL": "http://controller:9696",
"id": "3d70017df8ee40d698988ad52b25cc8e",
"internalURL": "http://controller:9696",
"publicURL": "http://controller:9696",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "neutron",
"type": "network"
},
{
"endpoints": [
{
"adminURL": "http://controller:35357/v2.0",
"id": "23bb295b14554d2b89535d67632e7c60",
"internalURL": "http://controller:5000/v2.0",
"publicURL": "http://controller:5000/v2.0",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "keystone",
"type": "identity"
}
],
"token": {
"audit_ids": [
"XNBLV1ohSXensbuHqwTo3Q"
],
"expires": "2015-11-06T11:29:22Z",
"id": "b1470e1f13284a8b8f979eb652e29db5",
"issued_at": "2015-11-06T10:29:22.423828",
"tenant": {
"description": "Admin Project",
"enabled": true,
"id": "de8f43bfe4244a1aa315a70a43248d60",
"name": "admin"
}
},
"user": {
"id": "9c20d9fe21a14741ac1486b2db058bd5",
"name": "admin",
"roles": [
{
"name": "admin"
}
],
"roles_links": [],
"username": "admin"
}
}
}
这里面有很多关于这个tenant的信息,其中最重要的是token的id,为b1470e1f13284a8b8f979eb652e29db5,这是我们后面调取api需要的,还有注意de8f43bfe4244a1aa315a70a43248d60是tenant_id。
接下来我们开始看看这个项目里面的虚拟机
curl -v -H "X-Auth-Token:b1470e1f13284a8b8f979eb652e29db5" http://controller_ip:8774/v2/tenant_id/servers
把得到的令牌写好,执行后得到如下信息:
{
"servers": [
{
"id": "098982e0-251d-4306-9171-f4d52674fde3",
"links": [
{
"href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/servers/098982e0-251d-4306-9171-f4d52674fde3",
"rel": "self"
},
{
"href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/servers/098982e0-251d-4306-9171-f4d52674fde3",
"rel": "bookmark"
}
],
"name": "vm2"
},
{
"id": "86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
"links": [
{
"href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/servers/86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
"rel": "self"
},
{
"href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/servers/86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
"rel": "bookmark"
}
],
"name": "vm1"
}
]
}
这里可以明显看到有两个虚拟机,分别为vm1和vm2,这都是我之前创建的。
再看看我的image有哪些
curl -v -H "X-Auth-Token:b1470e1f13284a8b8f979eb652e29db5" http://controller_ip:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images | python -mjson.tool
执行后得到以下信息
{
"images": [
{
"id": "cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
"links": [
{
"href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
"rel": "self"
},
{
"href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
"rel": "bookmark"
},
{
"href": "http://controller:9292/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
"rel": "alternate",
"type": "application/vnd.openstack.image"
}
],
"name": "windows7-x86_64-bpm20150724"
},
{
"id": "5c997a18-3f93-41bb-8ce2-724b10d0d418",
"links": [
{
"href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
"rel": "self"
},
{
"href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
"rel": "bookmark"
},
{
"href": "http://controller:9292/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
"rel": "alternate",
"type": "application/vnd.openstack.image"
}
],
"name": "rhel7.1"
},
{
"id": "e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
"links": [
{
"href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
"rel": "self"
},
{
"href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
"rel": "bookmark"
},
{
"href": "http://controller:9292/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
"rel": "alternate",
"type": "application/vnd.openstack.image"
}
],
"name": "cirros-0.3.4-x86_64"
}
]
}
可以看到我一共有3个镜像
至此,其他api查看文档进行查看即可,都是相似的方法,这里仅作一个简单介绍。
二、使用火狐firefox 的 restclient 工具来 使用 openstack的api
下面我还尝试了一些Firefox的restclient,来调取api
当然需要打开火狐浏览器安装restclient的插件https://addons.mozilla.org/en-US/firefox/addon/restclient/,当然使用java的客户端也可以http://code.google.com/p/rest-client/
这里演示两个rest的方法来使用,get和post
先看看post:
我们来取一个ADMIN用户的admin的tenant的令牌。
对比下curl的命令
curl -k -X 'POST' -v http://controller_ip:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "ADMIN", "password":"MY_PASSWORD"},"tenantId":"de8f43bfe4244a1aa315a70a43248d60"}}' -H 'Content-type: application/json' | python -mjson.tool
先设置http的header ,name为 Content-Type ,value为 application/json

设置好后输入网址http://controller_ip:5000/v2.0/tokens,并且把要post的json的数据写入到body里面,最后点击按钮SEND即可,可以得到和curl一样的json数据

接下来试试使用get的方法
我们得到了tenant的token,就可以使用get方法获取其虚拟机的信息
注意要先设置token在header中,name为X-Auth-Token,value为token,然后输入网址,选择为get方法,点击SEND即可得到:

其他的api几乎都是get和post的方法,这里简单演示了firefox的restclient的用法,希望大家多多指教
参考资料:
openstack quick start api:http://docs.openstack.org/zh_CN/api/quick-start/content/index.html
openstack api document:http://developer.openstack.org/api-ref.html
Openstack api 学习文档 & restclient使用文档的更多相关文章
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- SpringBoot学习笔记:Swagger实现文档管理
SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...
- JavaScript学习笔记7 之DOM文档对象模型
一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...
- .NET Core WEB API使用Swagger生成在线接口文档
1项目引用Swashbuckle.AspNetCore程序集和Microsoft.Extensions.PlatformAbstractions程序集 右击项目打开"管理NuGet程序包.. ...
- API接口文档中将Swagger文档转Word 文档
一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...
- 015-elasticsearch5.4.3【五】-搜索API【四】Joining 多文档查询、GEO查询、moreLikeThisQuery、script脚本查询、span跨度查询
一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平 ...
- .Net Api 之如何使用Elasticsearch存储文档
.Net Api 之如何使用Elasticsearch存储文档 什么是Elasticsearch? Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据 ...
- ArcGIS帮助文档VS帮助文档不能复制图片的解决方法
ArcGIS帮助文档VS帮助文档不能复制图片的解决方法(非常有用) 问题:ArcGIS的学习文档,开发文档,vs的帮助文档,一般都不能复制图片,有的甚至不能复制文本. 解决方法 在文档空白处右 ...
- 在Outlook中查看预览SharePoint文档库的文档
本文概况 阅读时间: 约2分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户,管理员 难度指数:★★☆☆☆ 在日常工作中,总有一些常用的文档需要经常打开查看,其实我 ...
随机推荐
- bootstrap 学习总结
Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.当前最新版本是3.2.0; 使用的第一步,可以直接复制官方的模版,另存为index ...
- Puppet简易入门
一.查看官方提供的下载源 https://docs.puppet.com/guides/puppetlabs_package_repositories.html 二. 选择对应系统的下载源 因为本机是 ...
- c++编译器对多态的实现原理总结
问题:定义一个空的类型,里面没有任何的成员变量或者成员函数,对这个类型进行 sizeof 运算,结果是? 结果是1,因为空类型的实例不包含任何信息,按道理 sizeof 计算之后结果是0,但是在声明任 ...
- 关于Javascript作用域及作用域链的总结
本文是根据以下文章以及<Javascript高级程序设计(第三版)>第四章相关内容总结的. 1.Javascript作用域原理,地址:http://www.laruence.com/200 ...
- Spring Boot文档阅读
原因之初 最初习惯百度各种博客教程,然后跟着操作,因为觉得跟着别人走过的路走可以少走很多弯路,省时间.然而,很多博客的内容并不够完整,甚至错误,看多了的博客甚至有千篇一律的感觉.此外,博客毕竟是记载博 ...
- Bootstrap3 Grid system原理及应用
刚开始用Bootstrap的格子系统写布局的时候遇到了这样一个问题: 我的页面中有这样一个布局 我希望当屏幕的宽度小于他们俩宽度之和的时候,右边的部分会掉下来,他们垂直摆放. 而我用col-xs-6的 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...
- ASP.NET MVC中获取URL地址参数的两种写法
一.url地址传参的第一种写法 1.通过mvc中默认的url地址书写格式:控制器/方法名/参数 2.实例:http://localhost:39270/RequestDemo/Index/88,默认参 ...
- 泛型(Generics)
Framework类库中的泛型 泛型可以使代码重用,提高开发效率 CLR允许在引用类型.值类型或接口中定义泛型方法: CLR允许创建泛型引用类型.泛型值类型(枚举不允许创建).泛型委托类型和泛型接口类 ...
- gRPC C#学习
前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...