跳转到: 导航, 搜索

Neutron/ServiceIntegration

高级服务框架

范围

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

原理

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

实现概述

通用考虑事项

  • Quantum 应该能够加载多个 Adv Svc 插件
  • Quantum 应该能够加载相同 Adv Svc 类型的多个实现
  • Quantum Adv Svc 插件和核心插件应相互独立
  • 每个 Adv Svc 插件可以实现不同的主要功能/资源集,但应实现单个接口,允许 quantum 加载适当的扩展并路由 API 调用到正确的 Adv Svc 插件
  • Adv Svc 由 (类型, 名称) 唯一定义,可用于 API URL 中作为通用前缀。例如,对于负载均衡器实现 lb_impl,通用前缀可能如下所示:/v2.0/svc/loadbalancer/lb_impl/...
  • 高级服务不应依赖于部署方法,路由/非路由
  • 如果高级服务能够以软件包的形式分发,将会更好

配置变更

  • 配置应指定要加载的 adv 服务插件列表。

示意图

{{https://wiki.openstack.org/Quantum/ServiceIntegration?action=AttachFile&do=get&target=qschema.jpg}}

数据模型变更

Adv Svc 框架不意味着更改核心数据模型。相反,每个服务实现都可以拥有自己的数据模型

配置变量

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
  • 待定:模型相关接口

Quantum 需要的变更

  • PluginAwareExtensionManager 不仅应支持核心插件,还应支持 adv svc 插件列表
  • 对于加载的每个 Adv Svc 插件,PluginAwareExtensionManager 应在相应的扩展 API URL 前面加上 /v2.0/service_type/service_name/ 前缀。
  • 扩展框架可能需要多次处理相同的扩展,以便能够将相同的扩展调用路由到不同的 Adv Svc 插件。

插件接口

  • 核心插件接口没有新的要求。
  • 对于 Adv Svc 插件没有具体要求:它应匹配相应的扩展 API。

依赖项

每个 Adv Svc 插件可以有自己的依赖项。

CLI 要求

CLI 客户端可能需要支持通过某种插件机制为每个特定高级服务提供额外的命令集(?)