OpenStack操作之Restful API

Restful API 是OpenStack各服务调用的接口,简单理解为可以通过网络去调用的函数。Postman是一款前端调用工具,测试后端接口的时候往往是使用该工具去验证。在OpenStack的使用中,可以使用Postman调用OpenStack Restful接口。这里要区别命令行和Restful接口,命令行的使用是调用Restful来实现的。所以,不管是命令行还是horizon都是调用了OpenStack中Restful API去实现相应的功能。希望通过Postman调用接口的方式进一步去剖析OpenStack。

一、安装Postman

1、下载Postman离线安装包

百度云盘链接: https://pan.baidu.com/s/1kUVxKI7

2、Chrome安装Postman

2.1打开Chrome。
2.2 点击更多工具-->扩展程序-->加载已解压的扩展程序-->选择下载的安装包文件,稍等即可安装成功。
2.3 安装成功之后在扩展程序中有已经安装好的Postman,直接运行。

运行Postman如下图所示:

二、简单使用

1、获取token

token是环境可操作的前提,OpenStack登陆时填写的用户名+密码,登陆之后的操作都是使用token。获取token需要填写的内容如下:

  • 请求方式为POST
  • 请求的URL为 http://controller-ip:5000/v2.0/tokens。
  • 请求的body格式为raw,JSON格式。
  • 请求的body具体内容如下表

下图为详细的填写内容,1-6分别是:
1.请求方式为POST
2.请求URL地址
3.传入内容body
4.body的内容的类型为raw
5.body的内容的格式为JSON
6.具体的body内容
body内容为用户信息,如果是使用admin用户登录,用户名为admin,密码为*******,租户名为 admin。

返回信息如下,具体的内容包括
1. 获得的token值
2. 搭建的环境中各服务的Restful 端点
注意这个返回状态信息,200 OK表示请求正确。状态是判断请求是否成功的重要依据。该请求返回类型是http标准请求码,常见的请求码如下:

  • 200 - OK 一切正常,对GET和POST请求的应答文档跟在后面。
  • 201 - Created 服务器已经创建了文档,Location头给出了它的URL。
  • 202 - Accepted 已经接受请求,但处理尚未完成。
  • 400 - Bad Request 请求出现语法错误。
  • 401 - Unauthorized 访问被拒绝,客户试图未经授权访问受密码保护的页面。
  • 404 - Not Found 无法找到指定位置的资源。这也是一个常用的应答。


如上图选中部分为获取的token值。在获取token的同时,返回的信息还有所有服务的请求地址即Catalog。
根据返回信息得知核心服务的URL:

以nova服务为例,具体分析其中的内容。包括:

其中endpoints的内容是nova服务在keystone服务中注册的Restful路径。在endpoint中从上到下的作用分别是:
1.admin管理用户的URL
2.域名
3.内部服务
4.nova服务的id
5.公共服务

2、nova服务操作

2.1 准备工作

  • Restful API路径

在OpenStack社区中有OpenStack Restful API的使用文档。https://developer.OpenStack.org/API-guide/quick-start/

  • token值

token值是在上面使用用户名和密码获取。
完成以上准备工作我们来开始使用。首先查看官方文档中nova服务的API的描述。从API使用手册中进入Compute API。

如下图看到的都是nova的操作,每个操作都是对应一个类型+路径。类型有GET查看类的操作,有POST设置类的操作。路径为/servers。以查看环境中的虚拟机为例,操作类型为GET,路径为/servers。这里的路径没有包括前面的端点,因为每个服务的端点端口号不同,版本信息不同。结合获取token时返回的端点信息为一个完整的路径。nova的端点信息为 http://controller:8774/v2.1,所以请求的完整路径为http://controller:8774/v2.1/servers。使用时将controller换成控制节点的ip地址即可。

2.2 查询主机

填写Postman,填写的内容有4个点,分别是:
1.请求类型。
2.请求的URL地址,上面已经分析过完整的地址。
3.设置访问的header,这里是设置token的key。第一步已经获取了token的值,剩余的访问都是使用token处理。
4.设置token的值。

返回信息为环境中所有虚拟机的简要信息。我的环境中只有一个虚拟机,是上一篇文章中创建的虚拟机myinstance。注意name和id两个参数。一般在OpenStack中要么使用name操作虚拟机,要么使用id操作虚拟机,两者可以互换。记下该id,后面需要使用。

如果想要查看虚拟机更详细的信息,可以使用/server/detail路径的API。如下是myinstance的详细信息,可以分析出使用的网络名为mynetwork。更多信息可以亲自动手查看一次。

上面介绍的是GET操作,GET操作一般都是查看内容,不涉及到传值。Restful API的另一大操作是需要POST操作,当需要传入一些参数去改变操作对象时,使用为POST的类型。以暂停虚拟机为例,操作是类型+路径+body。
1.类型为POST。
2.路径为/servers/server-id/action。server_id为上一步查询到的id信息。
3.body是填入的暂停的动作,具体见官方手册。

2.3 暂停主机

暂停虚拟机填写的参数分别是:
1.请求类型为post请求
2.URL为/servers/server-id/action
3.body填入动作:暂停。

再次查询该虚拟机的详细信息是,能够查询到vm_state是paused状态。

通过上面Postman调用Restful API接口的操作,已经介绍了Postman的基本使用技巧和Restful API的使用方式。下面通过完成创建一个虚拟机的一个小目标来进一步学习Restful API的使用技巧。

三、创建虚拟机

前言

如下图是官方文档中给出的创建虚拟机的body内容。有四个参数:

  • name
  • imageRef
  • flavorRef
  • network

name是我们自己定义的,剩余三个参数要自己查找。想要创建一个虚拟机,首先要查询到imageref、flavorref、networks,并选择合适的内容。然后组装查询到的内容,创建虚拟机。

1、准备工作
1.1、查询镜像url
从官网上找到镜像API介绍

填写URL时和nova操作一样,要知道image服务端点,从获取token时返回的的服务类型中查找,可以得知image的端点是:http://controller:9292。注意不要忘记了token。

经过查询可知镜像的id为c980b3ee-99e7-4372-9ce4-354e7e7647fe。记下备用。
1.2、查询flavor

使用nova的端点信息,加上/flavors路径。完整路径为:http://controller_ip:8774/v2.1/flavors。

从返回信息中记下名为myflavor,flavor id为 e941b823-cdb0-45c5-9f0d-148770588970。记下备用。

1.3、查询network

查询官网网络API,可知,路径为/v2.0/networks,完整的URL为:http://controller:9696/v2.0/networks。

从查询结果中选择名为mynetwork的网络, network id 为4bc273a0-e9a5-4a26-b713-509704d19368。记下备用。

2、创建虚拟机

4.1获取参数
到目前为止,我们已经集齐了三颗龙珠,不是三个参数,接下来就可以创建虚拟机了。镜像、规格、网络分别如下:
1.镜像 c980b3ee-99e7-4372-9ce4-354e7e7647fe
2.规格 e941b823-cdb0-45c5-9f0d-148770588970
3.网络 4bc273a0-e9a5-4a26-b713-509704d193

4.2组装参数

根据手册组装我们自己的body信息,其中注意network的格式。

4.3 填写参数
根据官网给出的参数,类型+URL+body。类型为POST,URL为http://controller_ip:8774/v2.1/servers,body为上面填写好的内容。

返回信息如下:

再次查看环境中虚拟机,可以看到刚刚创建的名为my_second_instance的主机。

3、简单总结

Restful API能够完成所有对OpenStack的操作。 OpenStack中消息传递有两种机制,一种是消息队列,另一种就是Restful API。使用Restful API客户端能够调用各种服务提供的业务,各服务之间的相互配合也是通过其完成。学习Restful API能够深刻理解OpenStack的骨骼筋络。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/20506.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于18-02-05
2