感谢朋友支持本博客。欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免。欢迎指正!

如有转载,请保留源作者博客信息。

Better
Me的博客
blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。

在前面文章中,已经具体介绍了。怎样从页面dashboard调用novaclient然后生成一个url地址 。或从启动nova
--debug list 然后调用novaclient然后生成URL地址


url地址形如: GET /v2/b077619bde964a4eb924db869fba977d/servers/detail

今天文章中要解说的是当我们以后生成了这样一个url了,下一步wsgi框架又是怎样依据url去调用nova底层对应的代码。


解说这个之前,先回顾下查看routes已公布的api。

很多其它详情请查看文章:openstack_ice之wsgi具体解释(paste从ini配置文件->routesr具体公布流程)


1、首先将route mapper打印信息出来:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py

重新启动openstack-nova-api服务

service  openstack-nova-api restart
tailf /var/log/nova/api.log

以上打印的route信息,就是底层通过wsgi,将api以加入到route的mapper。公布给外边调用。

2、接下来解说怎样加入自己定义api,并加入到route mapper中,公布出来给外部调用.
注:接下来以网络模块为例,添加一个test_api接口。

下图为未加入前,network的route信息:

通过之前的文章分析,找到wsgi的入口:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

os_network为openstack封装的,用来添加映射route mapper路由的类:

中加入下图代码:test_member:post、test_collection:
每次加入完毕须要又一次公布须要重新启动openstack-nova-api服务。
重新启动后查看os-network路由信息例如以下图:

如上图发现test_member、test_collection路由信息公布成功。

member_actions公布的api是针对每一个特定的对象,比如获取id为1的person所有信息。

因此须要在url前面添加id字段属性。

collection_actions公布的api是针对对象集合,比如获取全部person的信息。

跟多关于route信息请參考文章:wsgi-restful-routes具体解释

3、解说:公布api成功,后台的route控制器接收到匹配的url之后。怎样控制调用后台代码
url的产生大致有三种方式:
1:用dashboard通过novaclient组装。(网络的由neutronclient组装,简单起见,兴许文章默认仅仅提及novaclient)
2:通过系统命令比如nova list产生。
3:通过curl自己组装。

第一和另外一种方式。请參考之前相应文章具体解释。

接下来具体介绍下假设通过curl调用已公布的route,开发自己定义api。

注:底层api开发。多採用第三种方式进行。


第一步获取token:
运行nova --debug list:
当中X-Auth-Token后面的值为须要获取的token。
第二步:
将token值加入到环境变量中(也能够不加入环境变量,每次请求时带上)
vim  vim .bashrc

这样以后就能够直接使用$token获取token的值。
export .bashrc文件
echo $token将看到token值

第三步:发送url请求:
curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/servers/f664204b-d4ec-4d01-aec9-757719a8d06b'
-X GET -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"

相应的route为:

当运行上述url请求时候:则相应找到上述路由。


4、请求自己定义的路由test_collection:
依据路由信息,拼接url为:

curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection'
-X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"

错误为404没有找到:


打开route公布源代码:
vim /usr/lib/python2.6/site-packages/nova/api/openstack/compute/contrib/os_networks.py

进入到路由控制器:NetworkController():
能够看到路由控制器类有方法show(),delete()等。
在控制器类定义test_collection方法,例如以下图:
重新启动nova-api服务加入的代码生效。(每次改动api模块代码则必须重新启动服务,后面将不再反复)

再次请求url:
curl -i 'http://192.168.1.158:8774/v2/b077619bde964a4eb924db869fba977d/os-networks/test_collection'
-X POST -H "X-Auth-Project-Id: admin" -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-Auth-Token:$token"

api日志:


在test_collection函数中,加入自己定义的底层代码就可以。

到此加入底层api完毕。


openstack-wsgi的route中添加api流程具体解释(os-networks)添加的更多相关文章

  1. 如何在Web项目中给没有添加API核心组件添加APIController的帮助页HelpPage

    前言: ASP.NET中的Web项目可以通过APIController控制器来为其他项目提供接口.  而我们在调试这些接口时,可以选择单元测试,网页测试(Get接口),自己写测试代码或者第三方测试工具 ...

  2. IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问

    IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问 原文:http://docs.identityserver.io/en/release/quickst ...

  3. openstack nova 源码解析 — Nova API 执行过程从(novaclient到Action)

    目录 目录 Nova API Nova API 的执行过程 novaclient 将 Commands 转换为标准的HTTP请求 PasteDeploy 将 HTTP 请求路由到具体的 WSGI Ap ...

  4. [Python][flask][flask-login]关于flask-login中各种API使用实例

    本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了 ...

  5. 使用.net中的API网关模式封装微服务

    在本文中,我们将了解如何使用API网关模式来封装微服务并抽象出底层实现细节,从而允许使用者拥有进入我们系统的一致入口点. 为了构建和测试我们的应用程序,我们需要: 1.Visual Studio 20 ...

  6. OpenStack安装部署管理中常见问题解决方法

    一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...

  7. 浅析如何在Nancy中生成API文档

    前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...

  8. asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问

    一.概述 在上篇中,探讨了交互式用户身份验证,使用的是OIDC协议. 在之前篇中对API访问使用的是OAuth2.0协议.这篇把这两个部分放在一起,OpenID Connect和OAuth 2.0组合 ...

  9. .Net Core中的Api版本控制

    原文链接:API Versioning in .Net Core 作者:Neel Bhatt 简介 Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制 在本 ...

随机推荐

  1. CAD使用GetxDataString读数据(com接口)

    主要用到函数说明: MxDrawEntity::GetxDataString2 读取一个字符扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, retval ...

  2. rsync_ssh

    rsync -av -e "ssh" /data/wwwroot/a1 node2:/data/wwwroot/

  3. filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration interface"

    filezilla server FTP 安装报错   "could not load TLS network. Aborting start of administration inter ...

  4. 微信小程序(template的使用)

    小程序的template是一个模版功能,在创建一个template后,其他的页面可以引用,相比component较简单.方便! template只需要两个文件,一个wxss文件和wxml文件,也只有这 ...

  5. Web项目ConcurrentModificationException异常

    后台SSH在做Session删除的时候,遇到了ConcurrentModificationException异常. 参考资料:http://blog.csdn.net/idesvo/article/d ...

  6. 浅谈FFT(快速博立叶变换)&学习笔记

    0XFF---FFT是啥? FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform),它根据离散傅氏变换的奇.偶.虚.实等 特性,对离散傅立叶变换的算法进行改进 ...

  7. 在你的Android手机上运行Linux

    之前试过许多方法(也就几种),像什么Complete Linux Installer,Debian noroot,利用已有的Linux构造Bootstrap之类,要么就是复杂得要命(调了两天没有调出来 ...

  8. Linux环境搭建SVN服务

    一.准备工作 首先要保证自己的linux电脑能上外网,我这电脑因为是新的,没有配置网络,所以再这块花费了点时间. 1.检查ip信息 >ifconfig 2.检查DNS服务器 >cat  / ...

  9. 零基础入门学习Python(4)--改进我们的小游戏

    前言 在以前的博客中有做个一个小游戏,但是太简单了,所以这次就来对我们做的小游戏进行改进,改善从以下四个方面进行: 程序猜错的时候要给出提示,例如告诉用户输入的值是大了还是小了. 以前程序每运行一次只 ...

  10. MapReduce架构与执行流程

    一.MapReduce是用于解决什么问题的? 每一种技术的出现都是用来解决实际问题的,否则必将是昙花一现,那么MapReduce是用来解决什么实际的业务呢? 首先来看一下MapReduce官方定义: ...