openstack:RESTful API的查看与调试

1 相关文档及官网示例

官网API介绍:

《openstack-bk-api-ref.pdf》

网址:

http://developer.openstack.org/api-ref.html

下载pdf:

http://developer.openstack.org/api-ref-guides/bk-api-ref.pdf

关于RESTful可以参考官方文档:

http://docs.openstack.org/zh_CN/api/quick-start/content/index.html

pdf版本为:

svn://200.200.0.10/vt/vt/VTP/Cloud2.0/Documents/13.预研/01.预研报告/预研文档分享/cinder/openstack-restful-api/api-quick-start-onepager.pdf

实例(这里的python -m json.tool可以让输出看起来是json格式):

# curl -s -X POST http://192.168.15.180:5000/v2.0/tokens -H "Content-Type:application/json" \

-d ‘{"auth": {"tenantName":"admin","passwordCredentials":  \ {"username":"admin","password":"83c53e477779468a"}}}‘|python -m json.tool

输出比较多,一般我们只是看token id,这里把其他信息删除:

"token": {

"audit_ids": [

"d5LrCnXNSB-aGwz0x6bSJg"

],

"expires": "2015-08-26T09:24:07Z",

"id": "fc62e669e3b0417faac71e0840c30354",

"issued_at": "2015-08-26T08:24:07.511407",

"tenant": {

"description": "admin tenant",

"enabled": true,

"id": "5f8211463783496b9621c51d5666e70e",

"name": "admin"

}

},

2 使用--debug查看解析

可以通过cinder --debug xxx看到发送的具体的RESTful API

这里发了三条curl命令:

(1)curl -g -i -X GET http://192.168.15.180:5000/v2.0/ -H "Accept: application/json" -H "User-Agent: python-keystoneclient"

(2)curl -g -i -X GET http://192.168.15.180:8776/ -H "Accept: application/json" -H "User-Agent: python-keystoneclient"

(3)curl -g -i -X GET http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/detail -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}58e60a153a105abbc64cd8f28ef8de8f227660fc"

解释:前面两条命令不用管,实际发的是第三条命令。如果自己写API不掉上面两个,实际上也会发上面的两个命令。

实际上List的API只有这一个

curl -g -i -X GET http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/detail -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}58e60a153a105abbc64cd8f28ef8de8f227660fc"

3. 使用crul单步实现cinder list示例

3.1 获取token -- 参考官网文档《http://docs.openstack.org/zh_CN/api/quick-start/content/index.html》给的命令

#curl -s -X POST http://192.168.15.180:5000/v2.0/tokens -H "Content-Type: application/json" -d ‘{"auth": {"tenantName": "‘"$OS_TENANT_NAME"‘", "passwordCredentials": {"username": "admin", "password": "83c53e477779468a"}}}‘ | python -m json.tool

这里会输出很多东西,只需要看token字段:

"token": {

"audit_ids": [

"UGH_HfiYQBy3DleHiZk0nw"

],

"expires": "2015-08-26T10:52:39Z",

"id": "aaa9da01640249abb6032cf013a4095c",

"issued_at": "2015-08-26T09:52:39.549531",

"tenant": {

"description": "admin tenant",

"enabled": true,

"id": "5f8211463783496b9621c51d5666e70e",

"name": "admin"

}

},所以这里获取的toke id是:aaa9da01640249abb6032cf013a4095c

3.2 使用获取的token发送HTTP请求

# curl -g -i -X GET http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/detail -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: aaa9da01640249abb6032cf013a4095c"

这里X-Auth-Token后面就是在上面获取的token

而这里的5f8211463783496b9621c51d5666e70e为租户ID,可以通过keystone 的命令来查看:

4 整理一下cinder常见的API

4.1 创建卷

curl -g -i -X POST http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes -H "User-Agent: python-cinderclient" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}c88ee47d56a7d428f347fa1d2776783c405d7df9" -d ‘{"volume": {"status": "creating", "availability_zone": null, "source_volid": null, "display_description": null, "snapshot_id": null, "user_id": null, "size": 1, "display_name": "volume3", "imageRef": null, "attach_status": "detached", "volume_type": null, "project_id": null, "metadata": {}}}‘

4.2 删除卷

curl -g -i -X DELETE http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/73cbde94-c0e6-4b8a-85fb-0ad873d075eb -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}74c65bdbf3449ec167c6779cd358e0b9fbaab4d7"

4.3 卷列表

命令:

cinder --debug list

请求:

curl -g -i -X GET http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/detail -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}784a77f98f76124171231264290e63b9546f5b74"

4.4 创建快照

创建命令:

# cinder --debug  snapshot-create --display-name snap-volume2 volume2

所发请求:

curl -g -i -X POST http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/snapshots -H "User-Agent: python-cinderclient" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}00577623ba3ac3e4b349b3f08b3025b68a17e4a7" -d ‘{"snapshot": {"display_name": "snap-volume2", "force": false, "display_description": null, "volume_id": "40a7c155-30df-4235-93c7-b237616fdd15"}}‘

DEBUG:keystoneclient.session:RESP: [200] content-length: 267 x-compute-request-id: req-a9bf8f39-5cf8-4bec-9ec5-d231852f8ae8 connection: keep-alive date: Wed, 26 Aug 2015 10:48:26 GMT content-type: application/json x-openstack-request-id: req-a9bf8f39-5cf8-4bec-9ec5-d231852f8ae8

请求返回:

RESP BODY: {"snapshot": {"status": "creating", "display_name": "snap-volume2", "created_at": "2015-08-26T10:48:26.817644", "display_description": null, "volume_id": "40a7c155-30df-4235-93c7-b237616fdd15", "metadata": {}, "id": "c75753ef-ecc6-400a-b717-bdebc03f4bf2", "size": 1}}

格式化输出:

[[email protected] ~(keystone_admin)]# cat test| awk -F"," ‘{print $1;print $2;print $3;print $4;print $5;print $6;print $7}‘

{"snapshot": {"status": "creating"

"display_name": "snap-volume2"

"created_at": "2015-08-26T10:48:26.817644"

"display_description": null

"volume_id": "40a7c155-30df-4235-93c7-b237616fdd15"

"metadata": {}

"id": "c75753ef-ecc6-400a-b717-bdebc03f4bf2"

4.5 删除快照

命令:

cinder --debug  snapshot-delete snap-volume2

请求:

curl -g -i -X DELETE http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/snapshots/c75753ef-ecc6-400a-b717-bdebc03f4bf2 -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}e51ce4e914925d9dec15ff307a388b988c792740"

备注:c75753ef-ecc6-400a-b717-bdebc03f4bf2为快照ID

4.6 快照列表

命令:

cinder --debug snapshot-list

请求:

curl -g -i -X GET http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/snapshots/detail -H "User-Agent: python-cinderclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}92d62b8f42ce1dfb102b31419ba8b4e93f538ffd"

返回RESP BODY:

{"snapshots": [{"status": "available", "display_name": "snap-volume2", "created_at": "2015-08-26T10:48:26.000000", "display_description": null, "os-extended-snapshot-attributes:progress": "100%", "volume_id": "40a7c155-30df-4235-93c7-b237616fdd15", "os-extended-snapshot-attributes:project_id": "5f8211463783496b9621c51d5666e70e", "metadata": {}, "id": "c75753ef-ecc6-400a-b717-bdebc03f4bf2", "size": 1}]}

4.7 修改卷大小

命令:

cinder --debug  extend volume2 2

请求:

curl -g -i -X POST http://192.168.15.180:8776/v1/5f8211463783496b9621c51d5666e70e/volumes/40a7c155-30df-4235-93c7-b237616fdd15/action -H "User-Agent: python-cinderclient" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}5c2b388fa9230f5da4f03d6a5b93b00ac996f6eb" -d ‘{"os-extend": {"new_size": 2}}‘

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 02:47:48

openstack:RESTful API的查看与调试的相关文章

OpenStack Restful API框架介绍

1  pecan框架介绍 1.1  什么是pecan pecan是一个轻量级的python web框架,最主要的特点是提供了简单的配置即可创建一个wsgi对象并提供了基于对象的路由方式. 主要提供的功能点: (1)基于对象的路由分发 (2)支持restful接口方式 (3)可拓展的安全框架 (4)可拓展的模板语言支持 (5)可拓展的json支持 (6)简单的python配置 1.2  安装部署 为了不影响原有环境我们使用virtualenv工具创建一个隔离的python环境来做实验 $ virt

3.Spring Boot中使用Swagger2构建强大的RESTful API文档

原文:http://www.jianshu.com/p/8033ef83a8ed 由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发

DICOM医学图像处理:深入剖析Orthanc的SQLite,了解WADO & RESTful API

背景: 上一篇博文简单翻译了Orthanc官网给出的CodeProject上"利用Orthanc Plugin SDK开发WADO插件"的博文,其中提到了Orthanc从0.8.0版本之后支持快速查询,而原本的WADO请求需要是直接借助于Orthanc内部的REST API逐级定位.那么为什么之前的Orthanc必须要逐级来定位WADO请求的Instance呢?新版本中又是如何进行改进的呢?此篇博文通过分析Orthanc内嵌的SQLite数据库,来剖析Orthanc的RESTful A

RESTful API 设计最佳实践(转)

摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API是否应该加入版本信息? 背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完

Spring Boot中使用Swagger2生成RESTful API文档(转)

效果如下图所示: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <versi

DICOM:深入剖析Orthanc的SQLite,了解WADO&RESTful API

背景: 上一篇博文简单翻译了Orthanc官网给出的CodeProject上"利用Orthanc Plugin SDK开发WADO插件"的博文,其中提到了Orthanc从0.8.0版本之后支持快速查询,而原本的WADO请求需要是直接借助于Orthanc内部的REST API逐级定位.那么为什么之前的Orthanc必须要逐级来定位WADO请求的Instance呢?新版本中又是如何进行改进的呢?此篇博文通过分析Orthanc内嵌的SQLite数据库,来剖析Orthanc的RESTful A

Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTf

Node.js实现RESTful api,express or koa?

文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's RESTful API 1.1 RESTful架构 要理解什么是RESTful API我们可以先看一下什么是RESTful架构. REST是Representational State Transfer的缩写,我们可以理解为它的含义是“表现层状态转化”,wikipedia是这样说的:“an archi

基于Node的PetShop,RESTful API以及认证

由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户.最好的方法就是开发一个APP,我可以用这个APP来添加.更新和删除宠物.同时,业务要给宠物店的会员用户有限查看某些宠物. 我们在开发中会用到NodeJs以及基于NodeJs的开发框架,如:Express,Mongoose(用来管理MongoDB的数据),Passport(认证)等工具. 开始 我们这个项目的结构大概是这样的: petshot/ //服务端和客户端(android) server/ //服务端 mode