Neutron的Service服务 Extensions扩展

历史上,Neutron支持以下高级服务:

  • FWaaS (Firewall-as-a-Service): 作为L3 agent的一部分运行.
  • LBaaS (Load-Balancer-as-a-Service): 完全实现在neutron-server内部, 不能直接和agent交互. 在Queens中废弃.
  • VPNaaS (VPN-as-a-Service): 由L3 agent派生出来提供VPNaaS功能.

从Kilo发行版开始,这些服务被拆分到单独的代码仓库,并且更多的扩展也在开发中。服务插件是一种以内聚方式添加功能的干净方法。并且保持它们与框架的核心分离。以上提到的功能被开发为扩展extension(也称为服务plugin),并且更多的功能遵循同样的模式正在添加到Neutron。对于那些被认为是“正交”的网络服务(如tags, timestamps, auto_allocate等)这里有一个非正式的 机制mechanism 可在服务器启动时自动加载它们。

服务中调用核心插件

在许多情况下,服务可能希望创建由核心插件(如ports, networks, subnets)管理的资源。这个可以通过导入插件目录并直接获取对核心插件的引用而实现:

from neutron_lib.plugins import directory

plugin = directory.get_plugin()
plugin.create_port(context, port_dict)

然而,有一个重要的警告。几乎所有案例中都不应在正进行的事务中调用核心插件。这是因为许多插件(包括ML2)可以配置为在创建或修改对象后向后端(backend)发起调用。如果调用是在事务内部进行的,并且在核心插件调用后事务发送回滚,后端将不会被通知更改已撤消。这将导致核心插件与其配置的后端之间的一致性错误。

ML2具有防止某些方法与活动的DB事务一同调用,以帮助开发人员避免制造以上的错误。它将触发一个错误,明确地指出不应在事务内调用这个方法。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页