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就需要使用这个令牌。

  1. 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数据

  1. {
  2. "access": {
  3. "metadata": {
  4. "is_admin": 0,
  5. "roles": []
  6. },
  7. "serviceCatalog": [],
  8. "token": {
  9. "audit_ids": [
  10. "WPon6i60TamUfqcsPV2oVg"
  11. ],
  12. "expires": "2015-11-06T11:19:19Z",
  13. "id": "bc422dc370324535a64699640f50a3ab",//这个id就是令牌(token)
  14. "issued_at": "2015-11-06T10:19:19.559266"
  15. },
  16. "user": {
  17. "id": "9c20d9fe21a14741ac1486b2db058bd5",
  18. "name": "admin",
  19. "roles": [],
  20. "roles_links": [],
  21. "username": "admin"
  22. }
  23. }
  24. }

下面得到这个用户的所有项目(tenant),注意下面的token就是刚刚得到的那个令牌

  1. curl -X 'GET' -H "X-Auth-Token:bc422dc370324535a64699640f50a3ab" -v http://controller_ip:5000/v2.0/tenants | python -mjson.tool

这里面得到这个用户的项目(tenant)

  1. {
  2. "tenants": [
  3. {
  4. "description": null,
  5. "enabled": true,
  6. "id": "92afd13a680645c191a2aab7422a7a3b",
  7. "name": "AIM"
  8. },
  9. {
  10. "description": null,
  11. "enabled": true,
  12. "id": "b3457999de4d4add99e89f4f299f5857",
  13. "name": "ECM"
  14. },
  15. {
  16. "description": "Admin Project",
  17. "enabled": true,
  18. "id": "de8f43bfe4244a1aa315a70a43248d60",
  19. "name": "admin"
  20. },
  21. {
  22. "description": null,
  23. "enabled": true,
  24. "id": "f3c1015ff67e4cd18b022b9b51eb1123",
  25. "name": "IM"
  26. },
  27. {
  28. "description": null,
  29. "enabled": true,
  30. "id": "fae79b8f91b944b985d2b35373cf9bb2",
  31. "name": "Commerce"
  32. }
  33. ],
  34. "tenants_links": []
  35. }

可以看到我这里ADMIN用户总共有5个tenant,我们选取一个即可,就选取名为admin的项目,id看到为de8f43bfe4244a1aa315a70a43248d60

接下来我们去一个项目(tenant)看看它的虚拟机、等信息。

首先需要得到这个tenant的令牌信息,注意这个token和上面的那个不一样

  1. 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用户下的这个项目的令牌,得到如下信息:

  1. {
  2. "access": {
  3. "metadata": {
  4. "is_admin": 0,
  5. "roles": [
  6. "cf87d1b66b044cdd94972d72d6e4d474"
  7. ]
  8. },
  9. "serviceCatalog": [
  10. {
  11. "endpoints": [
  12. {
  13. "adminURL": "http://controller:9292",
  14. "id": "5f892fde3a2241c989355cdd6beea4b5",
  15. "internalURL": "http://controller:9292",
  16. "publicURL": "http://controller:9292",
  17. "region": "RegionOne"
  18. }
  19. ],
  20. "endpoints_links": [],
  21. "name": "glance",
  22. "type": "image"
  23. },
  24. {
  25. "endpoints": [
  26. {
  27. "adminURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
  28. "id": "0c52d8a741f740a6b83be51ae7082b62",
  29. "internalURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
  30. "publicURL": "http://controller:8774/v2/de8f43bfe4244a1aa315a70a43248d60",
  31. "region": "RegionOne"
  32. }
  33. ],
  34. "endpoints_links": [],
  35. "name": "nova",
  36. "type": "compute"
  37. },
  38. {
  39. "endpoints": [
  40. {
  41. "adminURL": "http://controller:9696",
  42. "id": "3d70017df8ee40d698988ad52b25cc8e",
  43. "internalURL": "http://controller:9696",
  44. "publicURL": "http://controller:9696",
  45. "region": "RegionOne"
  46. }
  47. ],
  48. "endpoints_links": [],
  49. "name": "neutron",
  50. "type": "network"
  51. },
  52. {
  53. "endpoints": [
  54. {
  55. "adminURL": "http://controller:35357/v2.0",
  56. "id": "23bb295b14554d2b89535d67632e7c60",
  57. "internalURL": "http://controller:5000/v2.0",
  58. "publicURL": "http://controller:5000/v2.0",
  59. "region": "RegionOne"
  60. }
  61. ],
  62. "endpoints_links": [],
  63. "name": "keystone",
  64. "type": "identity"
  65. }
  66. ],
  67. "token": {
  68. "audit_ids": [
  69. "XNBLV1ohSXensbuHqwTo3Q"
  70. ],
  71. "expires": "2015-11-06T11:29:22Z",
  72. "id": "b1470e1f13284a8b8f979eb652e29db5",
  73. "issued_at": "2015-11-06T10:29:22.423828",
  74. "tenant": {
  75. "description": "Admin Project",
  76. "enabled": true,
  77. "id": "de8f43bfe4244a1aa315a70a43248d60",
  78. "name": "admin"
  79. }
  80. },
  81. "user": {
  82. "id": "9c20d9fe21a14741ac1486b2db058bd5",
  83. "name": "admin",
  84. "roles": [
  85. {
  86. "name": "admin"
  87. }
  88. ],
  89. "roles_links": [],
  90. "username": "admin"
  91. }
  92. }
  93. }

这里面有很多关于这个tenant的信息,其中最重要的是token的id,为b1470e1f13284a8b8f979eb652e29db5,这是我们后面调取api需要的,还有注意de8f43bfe4244a1aa315a70a43248d60是tenant_id。

接下来我们开始看看这个项目里面的虚拟机

  1. curl -v -H "X-Auth-Token:b1470e1f13284a8b8f979eb652e29db5" http://controller_ip:8774/v2/tenant_id/servers

把得到的令牌写好,执行后得到如下信息:

  1. {
  2. "servers": [
  3. {
  4. "id": "098982e0-251d-4306-9171-f4d52674fde3",
  5. "links": [
  6. {
  7. "href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/servers/098982e0-251d-4306-9171-f4d52674fde3",
  8. "rel": "self"
  9. },
  10. {
  11. "href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/servers/098982e0-251d-4306-9171-f4d52674fde3",
  12. "rel": "bookmark"
  13. }
  14. ],
  15. "name": "vm2"
  16. },
  17. {
  18. "id": "86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
  19. "links": [
  20. {
  21. "href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/servers/86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
  22. "rel": "self"
  23. },
  24. {
  25. "href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/servers/86baaddc-3c3e-4687-87bc-2e22f53eb7ba",
  26. "rel": "bookmark"
  27. }
  28. ],
  29. "name": "vm1"
  30. }
  31. ]
  32. }

这里可以明显看到有两个虚拟机,分别为vm1和vm2,这都是我之前创建的。

再看看我的image有哪些

  1. curl -v -H "X-Auth-Token:b1470e1f13284a8b8f979eb652e29db5" http://controller_ip:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images | python -mjson.tool

执行后得到以下信息

  1. {
  2. "images": [
  3. {
  4. "id": "cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
  5. "links": [
  6. {
  7. "href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
  8. "rel": "self"
  9. },
  10. {
  11. "href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
  12. "rel": "bookmark"
  13. },
  14. {
  15. "href": "http://controller:9292/images/cfa488bb-f5aa-4f67-830c-6d84a1b0f062",
  16. "rel": "alternate",
  17. "type": "application/vnd.openstack.image"
  18. }
  19. ],
  20. "name": "windows7-x86_64-bpm20150724"
  21. },
  22. {
  23. "id": "5c997a18-3f93-41bb-8ce2-724b10d0d418",
  24. "links": [
  25. {
  26. "href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
  27. "rel": "self"
  28. },
  29. {
  30. "href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
  31. "rel": "bookmark"
  32. },
  33. {
  34. "href": "http://controller:9292/images/5c997a18-3f93-41bb-8ce2-724b10d0d418",
  35. "rel": "alternate",
  36. "type": "application/vnd.openstack.image"
  37. }
  38. ],
  39. "name": "rhel7.1"
  40. },
  41. {
  42. "id": "e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
  43. "links": [
  44. {
  45. "href": "http://9.111.222.23:8774/v2/de8f43bfe4244a1aa315a70a43248d60/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
  46. "rel": "self"
  47. },
  48. {
  49. "href": "http://9.111.222.23:8774/de8f43bfe4244a1aa315a70a43248d60/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
  50. "rel": "bookmark"
  51. },
  52. {
  53. "href": "http://controller:9292/images/e1c3cc65-54ae-4a76-9646-2d4dc3b7473b",
  54. "rel": "alternate",
  55. "type": "application/vnd.openstack.image"
  56. }
  57. ],
  58. "name": "cirros-0.3.4-x86_64"
  59. }
  60. ]
  61. }

可以看到我一共有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的命令

  1. 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使用文档的更多相关文章

  1. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  2. SpringBoot学习笔记:Swagger实现文档管理

    SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...

  3. JavaScript学习笔记7 之DOM文档对象模型

    一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...

  4. .NET Core WEB API使用Swagger生成在线接口文档

    1项目引用Swashbuckle.AspNetCore程序集和Microsoft.Extensions.PlatformAbstractions程序集 右击项目打开"管理NuGet程序包.. ...

  5. API接口文档中将Swagger文档转Word 文档

    一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...

  6. 015-elasticsearch5.4.3【五】-搜索API【四】Joining 多文档查询、GEO查询、moreLikeThisQuery、script脚本查询、span跨度查询

    一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平 ...

  7. .Net Api 之如何使用Elasticsearch存储文档

    .Net Api 之如何使用Elasticsearch存储文档 什么是Elasticsearch? Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据 ...

  8. ArcGIS帮助文档VS帮助文档不能复制图片的解决方法

    ArcGIS帮助文档VS帮助文档不能复制图片的解决方法(非常有用)   问题:ArcGIS的学习文档,开发文档,vs的帮助文档,一般都不能复制图片,有的甚至不能复制文本.   解决方法 在文档空白处右 ...

  9. 在Outlook中查看预览SharePoint文档库的文档

    本文概况 阅读时间: 约2分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户,管理员 难度指数:★★☆☆☆ 在日常工作中,总有一些常用的文档需要经常打开查看,其实我 ...

随机推荐

  1. EF CodeFirst EntityTypeConfiguration 自关联映射配置

    实体示例代码: public class Message { public Message() { } public int ID { get; private set; } public strin ...

  2. T-Sql(三)存储过程(Procedure)

    今天讲下T-sql语法中存储过程的用法,我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理 ...

  3. weight属性你用的真的6嘛?

    相信大家在日常开发中一定使用过weight这个属性,它的作用一个是权重,另一个就是渲染优先级,但是你真的能很6的使用它嘛?如果不是,那么请继续往下看!!! 我们知道,当weight起到不同作用的时候, ...

  4. Introduction to the Service Provider Interfaces--官方文档

    地址:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html What Are Services? Services are unit ...

  5. wordpress上传图片时重命名--修改插件时遇到的一些问题

    wordpress是用php语言开发的博客平台,它扩展性强,容易扩展,很适合拿来做二次开发. 1,问题由来 本周五,我在浏览公司的网站(基于wordpress开发)时发现,网站首页上有两篇文章的缩略图 ...

  6. js构建ui的统一异常处理方案(二)

    上一篇文章,我分析了同步代码做异常处理是基于责任链模式,而通过try.catch等语句可以很容易地实现这种责任链模式.但是如果是异步调用,我们无法直接通过try.catch语句实现责任链模式,并且通过 ...

  7. SqlServer基础之(触发器)

    概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...

  8. Hive UDF初探

    1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...

  9. RECONFIGURE语句会清空计划缓存么?

    几个星期前,有个网友问我一个非常有趣的问题:RECONFIGURE语句会清空计划缓存么?通常我对这个问题的答案是简单的是,但慢慢的我找出了真正的答案是“看情况啦”.我们来看下它,为什么“它看情况”. ...

  10. Premiere Pro & After Effects插件开发调试方法

    在给Adobe Premiere Pro(PR)和Adobe After Effects(AE)插件开发时,对于实时调试插件有着很强的需求.除了业务需求外,单步调试插件还能够摸清楚Plugin和Hos ...