Neutron/ServiceIntegration
Advanced Services Framework
Scope
The document describes how advanced services could be implemented within current quantum code architecture. It doesn’t define implementation or architecture detail of feature implementation.
Rationale
Advanced services framework should allow implementation of additional services to be independent and decoupled from core plugins. Installing advanced services should not require core db model change or core plugin code change.
Implementation Overview
General Considerations
- Quantum should be able to load several Adv Svc Plugins
- Quantum should be able to load several implementations of the same Adv Svc Type
- Quantum Adv Svc Plugin and Core Plugin should be independent
- Each Adv Svc Plugin may implement different set of main features/resources but should implement single interface allowing quantum to load proper extensions and route API calls to the proper Adv Svc Plugin
- Adv Svc is uniquely defined by (type,name) which could be used in API urls as a common prefix. E.g. for loadbalancer implementation lb_impl the common prefix could looks like: /v2.0/svc/loadbalancer/lb_impl/...
Changes in configuration
- configuration should specify a list of adv services plugins to load.
Schematic representation
Data Model Changes
Adv Svc Framework doesn’t imply change in core data model. Instead, each service implementation may have it’s own data model
Configuration variables
quantum.conf: service_plugins=quantum.plugins.advsvc.lbaas_plugin.lbaas_plugin_class, quantum.plugins.advsvc.dummy.dummy_impl_class
API
Framework doesn’t specify public API, each Advanced Service may introduce it’s own API. In case of several implementations of one service it may be needed to define one public API for the service type which are implemented differently by the plugins.
Advanced Service Plugin Interface (internal)
- get_type() - returns service type (string)
- get_name() - returns service name (string)
- supported_extension_aliases - array of strings. to be used with PluginAwareExtensionManager
Changes required in Quantum
PluginAwareExtensionManager should support not only a core plugin, but a list of adv svc plugins For each of loaded Adv Svc plugins PluginAwareExtensionManager should prepend corresponding extension API urls with /v2.0/service_type/service_name/ prefix. Extension framework may need to process same extension more than once to be able to route the same extension call to different Adv Svc plugin.
Plugin Interface
No new requirements for the core plugin interfaces. No specific requirements for Adv Svc plugin: it should match corresponding extension API.
Dependencies
Each Adv Svc plugin may have it’s own dependencies
CLI Requirements
CLI client may need to support additional command set for each of specific Advanced Service via plugins of some kind (?)