1 Neutron项目概览
ODL Neutron项目提供Openstack Neutron 通过OpenDaylight ML2 mechanism driver.集成功能的支持。它为OpensStack Neutron 数据模型定义了yang模型以及北向接口,包括REST API以及基于Yang模型的RESTCONF形式。
如下图所示为openstack与odl控制器的一个具体关系及定位说明。
Neutron项目的目录如下图所示,下面将简要介绍以下相关目录的功能:
- model:odl定制的neutron yang模型存放位置;
- neutron-spi:neutron南向(控制器北向)模型存放位置,从上层networking-odl下发的相关消息会首先适配成该目录定义的带注解的模型;
- northbound-api:定义了不通rest请求的API接口;
- transcriber:转录器目录,存放所有北向模型与model目录中定义yang模型的适配代码;
- features: 存放相关features工程,提供不同粒度的集成feature,方便用户根据需要灵活安装组件;
- neutron-hostconfig:提供hostconfig相关读写监听功能;
2 项目功能说明
odl-neutron项目的核心功能是作为odl-openstack对接方案的北向模块,为networking-odl插件提供相关配置下发及查询的REST接口,项目内部的核心功能是完成北向模型与model目录中定义的neutron yang模型的适配,完成neutron yang模型基于MDSAL方式的读写操作,为netvirt 等模块提供北向功能支持。
3 REST接口盘点
- NeutronNorthboundRSApplication
REST APIs | method | notes |
---|---|---|
NeutronNetworksNorthbound | 网络 | |
showNetwork | ||
listNetworks | ||
createNetworks | ||
updateNetwork | ||
deleteNetwork | ||
NeutronSubnetsNorthbound | 子网 | |
listSubnets | ||
showSubnet | ||
updateSubnet | ||
createSubnets | ||
deleteSubnet | ||
NeutronPortsNorthbound | 端口 | |
NeutronFloatingIpsNorthbound | 浮点ip | |
NeutronSecurityGroupsNorthbound | 安全组 | |
NeutronSecurityRulesNorthbound | 安全组规则 | |
NeutronFirewallNorthbound | 防火墙 | |
NeutronFirewallPolicyNorthbound | 防火墙策略 | |
NeutronFirewallRulesNorthbound | 防火墙规则 | |
NeutronLoadBalancerNorthbound | 负载均衡 | |
NeutronLoadBalancerListenerNorthbound | ||
NeutronLoadBalancerPoolNorthbound | 负载均衡池 | |
NeutronLoadBalancerHealthMonitorNorthbound | ||
NeutronMeteringLabelsNorthbound | ||
NeutronMeteringLabelRulesNorthbound | ||
NeutronVpnServicesNorthbound | vpn服务 | |
NeutronVpnIkePoliciesNorthbound | ||
NeutronVpnIpSecPoliciesNorthbound | vpn ipsec | |
NeutronVpnIpSecSiteConnectionsNorthbound | ||
NeutronBgpvpnsNorthbound | ||
NeutronL2gatewayNorthbound | l2gateway | |
NeutronL2gatewayConnectionNorthbound | ||
NeutronSFCFlowClassifiersNorthbound | sfc相关功能 | |
NeutronSFCPortPairsNorthbound | ||
NeutronSFCPortPairGroupsNorthbound | ||
NeutronSFCPortChainsNorthbound | ||
NeutronQosPolicyNorthbound | Qos策略 | |
NeutronTrunksNorthbound | trunks | |
NeutronTapServiceNorthbound | ||
NeutronTapFlowNorthbound |
4 类图说明
总体来说neutron项目在所有项目中是非常简单的存在,其主要功能就是定义rest接口,提供北向适配,读取存写 neutron yang。但是为了方便扩展,该项目在面向接口编程方便,还是存在一定的可取之处,面向接口的方式,让人在一开始接触这里的代码的时候觉得不是很舒适,但是分析了以下对于扩展她是存在一定好处的,如下是看代码过程中整理的一个简单的类图:
- AbstractNeutronNorthbound–继承该该抽象类的实现定义不同网络元素的REST接口;
- INeutronRequest–请求数据类型
- INeutronObject–请求数据–包含在INeutronRequest中;
- INeutronCRUD–具体转录器接口,INeutronL2gatewayCRUD等不通接口起到反射找到映射类作用;
- AbstractTranscriberInterface–转录器抽象类;完成INeutronCRUD的几个抽象方法,同时将模型适配的具体方法定义为抽象类,放入具体后续实现类,完成不通模型适配;
- AbstractNeutronInterface–neutron转录器抽象类;
- NeutronTranscriberProvider–转录器提供类,提供注册不通转录器服务;转录器同时也起到承上启下,核心的不同模型适配,在此处完成;
5 学习总结
5.1接口编程学习
根据第三章可知,rest请求有很多类型,但是总结出来不同网络元素、模型的操作大致可以总结为如下几种:
- show:查指定uuid
- list:查所有元素
- create:创建
- update:更新
- remove:删除指定元素
Neutron通过抽象类AbstractNeutronNorthbound的实现,简化了实际的北向接口的复杂性,AbstractNeutronNorthbound将上述方法统一抽象,将复杂代码提炼出来。此外抽象类中通过不通网络元素实现无参数的CRUD接口,可以方便通过反射方式,找到模型适配的相关类,这样能很好将模型适配方法抽象到转录器项目中去,这样便于后续扩展;
5.2 通用框架后续编程注意点
odl neutron定义了通用rest接口实现、注册、内部模型转换以及存储查询mdsal的方法,如果后续有新增模型,可以仅仅考虑如下内容,进行新增模型扩展,简化了工作量:
-
REST定义
定义restful api接口,实现AbstractNeutronNorthbound,并在NeutronNorthboundRSApplication完成注册;
-
外部模型
定义neutron请求和neutron模型(json转模型第一关),这里的模型是neutron外部模型;
-
内部模型
定义内部核心模型,为了后面适配作准备;
-
适配器编写
继承转录器抽象类,实现自己的CRUD,主要是完成toDd和fromMd方法;
-
适配器注册
在NeutronTranscriberProvider服务中,去注册转录器新增实现类,保证类可以被反射查到;
6 后续关注
odl neutron项目写完neutron yang相关模型到mdsal后,后续步骤就是负责业务处理的netvirt根据业务场景需求,监听不同yang模型,完成一系列操作,内部模型构建,流表下发等,后续再进行详细介绍。