openstack之在nova-api中扩展接口

// 未经博主本人允许,谢绝转载,谢谢

近期有需求在openstack的nova-api模块中添加接口,借此机会搞清楚nova-api如何利用wsgi等组件做的url api mapping

https://docs.openstack.org/nova/latest/contributor/api.html 这是官网对如何扩展API做的说明

首先增加接口有两种形式,一种是为已有的Resource扩展接口,由ControllerExtension入口做扩展即可,一种是新增了Resource及其相关接口,那么,由ResourceExtension入口做扩展。用户应当根据自己的业务场景来选择合适的扩展方式。

两个类及说明如下


以ControllerExtension为例,可以看admin_password.py是如何做ControllerExtension的

首先实现了AdminPasswordController类,在其中实现change_password接口,接口用装饰器标注:@wsgi.action('changePassword')

这个装饰器的作用是为函数属性wsgi_action赋值,另wsgi_action='changePassword',后续在初始化的时候,会用到这个字段

接下来需要继承V21APIExtensionBase类实现get_controller_extensions接口


这里面同时指明了这个AdminPasswordController类是为名为servers的resource扩展的

nova-api初始化时,在APIRouterV21类初始化api路由表,会做_register_controllers,此时会拿到所有ControllerExtension类的子类实例,调用get_controller_extensions,将用户自己实现的controller注册到对应的resource实例(比如上面AdminPasswordController对应的resource名字是servers,会根据servers拿到resource实例)的action和extension中,如action的注册方式是提取这个controller的wsgi_actions信息,添加到resource实例中wsgi_actions字典中,这个例子中,key是changePassword,value是AdminPasswordController的change_password接口信息


如此,请求进来时,wsgi的__call__接口进入_process_stack接口,进入get_method逻辑时


会根据wsgi_action字典记录的action name找到对应的Controller类和method name信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,014评论 19 139
  • Openstack Mitaka安装部署教程 一、实验环境: 系统:centos7.2-minimal 网络:管理...
    指间_流年阅读 2,249评论 0 0
  • 文/唐宋 为什么为什么 为什么会离开,会支离破碎 我狠狠地抽着烟 仿佛能把烟草融进我的身体里 可是如何抽,也抽不了...
    唐宋a阅读 289评论 2 1
  • 每个初入职场的新人都希望自己能尽快打开工作局面,力争在短短几年内实现自己事业、爱情、家庭的大丰收。但往往事与愿违,...
    第一任职阅读 545评论 0 3
  • 现在的社会,节奏越来越快。有些人弄弄副业,有些人要休息休息, 所以不应该占用别人的太多时间。 就好比: 拜访别人的...
    wyscjm阅读 1,977评论 0 0