跳转到: 导航, 搜索

Neutron/ServiceIntegration

高级服务框架

范围

本文档描述了如何在当前的量子代码架构中实现高级服务。它不定义功能实现本身的架构。

原理

高级服务框架应允许附加服务的实现与核心插件独立且解耦。安装高级服务不应需要更改核心数据库模型或核心插件代码。

实现概述

通用考虑事项

  • 量子应能够加载多个高级服务插件
  • 量子应能够加载相同高级服务类型的多个实现
  • 量子高级服务插件和核心插件应相互独立
  • 每个高级服务插件可以实现不同的主要功能/资源集,但应实现单个接口,允许量子加载适当的扩展并路由 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 客户端可能需要通过某种插件支持每个特定高级服务的附加命令集(?)