【ODL源码分析03】-opendaylight neutron项目分析

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的方法,如果后续有新增模型,可以仅仅考虑如下内容,进行新增模型扩展,简化了工作量:

  1. REST定义

    定义restful api接口,实现AbstractNeutronNorthbound,并在NeutronNorthboundRSApplication完成注册;

  2. 外部模型

    定义neutron请求和neutron模型(json转模型第一关),这里的模型是neutron外部模型;

  3. 内部模型

    定义内部核心模型,为了后面适配作准备;

  4. 适配器编写

    继承转录器抽象类,实现自己的CRUD,主要是完成toDd和fromMd方法;

  5. 适配器注册

    在NeutronTranscriberProvider服务中,去注册转录器新增实现类,保证类可以被反射查到;

6 后续关注

odl neutron项目写完neutron yang相关模型到mdsal后,后续步骤就是负责业务处理的netvirt根据业务场景需求,监听不同yang模型,完成一系列操作,内部模型构建,流表下发等,后续再进行详细介绍。

猜你喜欢

转载自blog.csdn.net/xinquanv1/article/details/84572055