Neutron/LBaaS/PluginDrivers

Driver framework for Loadbalancer Plugin
Rationale:

There may be a need to implement different architectures depending on the nature of the solutions. Some of possible options are the following:

1) Current reference implementation:

All balancers are HAProxy processes on the single host

2) Reference implementation improved by agent scheduling

balancers could be created on different hosts on which balancer agents are running. Agent (and therefore, host) is chosen by scheduler.

3) REST Proxy to external device management component

Plugin sends REST request to external component that chooses device and configures it

4) Device inventory/scheduling and multi-vendor agent

Plugin chooses device using device inventory and sends requests to agent, which applies configuration changes via device-drivers

To avoid making separate plugin for each of architectures we may introduce plugin-side drivers which implement interaction with other components of the service (agents, external systems or devices) in the way most suitable for the specific vendor solution.

Here are examples of possible workflows:

1) Current reference implementation



So for the reference implementation the responsibility of the driver is only to send notifications to the agent when it's needed or do nothing, otherwise.

2) Reference implementation improved by agent scheduling:



For advanced reference implementation driver also relies on agent scheduling to choose agent/host for the VIP and send notification via corresponding queue.

3) REST proxy



Driver is responsible for forwarding rest call to the external entity after request has passed db-layer

4) Device inventory/scheduling and multi-vendor agent



Driver is responsible for choosing device for the request using device inventory/device placement (scheduling) module