Neutron/ServiceIntegration
< Neutron
目录
高级服务框架
范围
本文档描述了如何在当前的量子代码架构中实现高级服务。它不定义功能实现本身的架构。
原理
高级服务框架应允许附加服务的实现与核心插件独立且解耦。安装高级服务不应需要更改核心数据库模型或核心插件代码。
实现概述
通用考虑事项
- 量子应能够加载多个高级服务插件
- 量子应能够加载相同高级服务类型的多个实现
- 量子高级服务插件和核心插件应相互独立
- 每个高级服务插件可以实现不同的主要功能/资源集,但应实现单个接口,允许量子加载适当的扩展并路由 API 调用到正确的高级服务插件
- 高级服务由 (类型, 名称) 唯一定义,可用于 API URL 中作为通用前缀。例如,对于负载均衡器实现 lb_impl,通用前缀可能如下所示:/v2.0/svc/loadbalancer/lb_impl/...
- 高级服务不应依赖于部署方法,路由/非路由
- 如果高级服务能够以软件包的形式分发,将会更好
配置变更
- 配置应指定要加载的高级服务插件列表。
示意图
{{https://wiki.openstack.org/Quantum/ServiceIntegration?action=AttachFile&do=get&target=qschema.jpg}}
数据模型变更
高级服务框架不意味着更改核心数据模型。相反,每个服务实现都可以拥有自己的数据模型
配置变量
quantum.conf: service_plugins=quantum.plugins.advsvc.lbaas_plugin.lbaas_plugin_class, quantum.plugins.advsvc.dummy.dummy_impl_class
API
框架不指定公共 API,每个高级服务可以引入自己的 API。
在存在一个服务的多个实现的情况下,可能需要为该服务类型定义一个公共 API,该 API 由插件以不同的方式实现。
高级服务插件接口(内部)
- get_type() - 返回服务类型(字符串)
- get_name() - 返回服务名称(字符串)
- supported_extension_aliases - 字符串数组。用于与 PluginAwareExtensionManager 一起使用
- 待定:模型相关接口
量子中需要的变更
- PluginAwareExtensionManager 不仅应支持核心插件,还应支持高级服务插件列表
- 对于加载的每个高级服务插件,PluginAwareExtensionManager 应使用 /v2.0/service_type/service_name/ 前缀将相应的扩展 API URL 附加到前面。
- 扩展框架可能需要处理相同的扩展多次,以便能够将相同的扩展调用路由到不同的高级服务插件。
插件接口
- 核心插件接口没有新的要求。
- 对于高级服务插件没有特定要求:它应匹配相应的扩展 API。
依赖项
每个高级服务插件可以有自己的依赖项。
CLI 要求
CLI 客户端可能需要通过某种插件支持每个特定高级服务的附加命令集(?)