Neuton API源码解析

类似于Nova对API资源的管理方式,Neutron也将基于各种网络抽象得到的API资源分为核心资源(Core API)和扩展资源(Extension API)两种,Core资源只对应L2层的network/subnet/port三种抽象,其余各层抽象都涵盖在Extension API的范围。
Neutron API实现的主要代码位于neutron/api目录
--api_common.py -一些API实现通用的类和方法
--extensions.py
--rpc
  |--agentnotifiers -通过RPC发送通知给Agent
  |--handlers
--v2
  |--attributes.py
  |--base.py
  |--resource_helper.py
  |--resource.py -WSGI Resource封装代码
  |--router.py
--versions.py -用户请求是版本号时,使用这个模块进行处理
--views
v2目录包括了几个L2层核心资源的实现代码。依照Openstack各个项目API的实现惯例,每个Neutron API资源都被封装成一个WSGI Application,Neutron API服务进程neutron-server接收到用户的HTTP请求后会通过Route模块将其路由到相关资源的Controller中去执行对应操作。
但是我们并没有在v2目录下发现形如network.py、subnet.py、port.py的文件去实现这几个核心资源,也没发现NetworkController/SubnetController/PortController这样的Controller类去处理具体用户请求。
这是因为对这三个核心资源来说,都使用base.py文件的类Controller去实现,只是在封成WSGI Application的时候调用这个文件的create_resource()函数根据不同的参数动态创建对应的Controller对象。
def create_resource(collection, resource, plugin, params, allow_bulk=False,
                    member_actions=None, parent=None, allow_pagination=False,
                    allow_sorting=False):
    controller = Controller(plugin, collection, resource, params, allow_bulk,
                            member_actions=member_actions, parent=parent,
                            allow_pagination=allow_pagination,
                            allow_sorting=allow_sorting)
return wsgi_resource.Resource(controller, FAULT_MAP)
而对于其余扩展资源,Neutron依然使用传统的方式去实现,它们在neutron/extensions/目录下都分别有对应的实现文件与对应的Controller。位于neutron/api/目录下的extension.py文件只是一些基类和公用的代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值