Add a StaticScheduler without automatic scheduling
The automatic scheduling that was introduced in [0] is having some issues. Add a StaticScheduler that can be used as an alternative for deployments that want explicit control over where their BGP speakers are getting scheduled. Add a job that runs with the new scheduler. [0] https://review.opendev.org/c/openstack/neutron-dynamic-routing/+/478455 Depends-On: https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/815294 Closes-Bug: 1920065 Signed-off-by: Dr. Jens Harbott <harbott@osism.tech> Change-Id: Ib7fcd0c7371bc75089b10024ee1b6e75c98f0188
This commit is contained in:
parent
be4bf54c30
commit
8a0ddf6051
13
.zuul.yaml
13
.zuul.yaml
|
@ -1,3 +1,15 @@
|
||||||
|
- job:
|
||||||
|
name: neutron-dynamic-routing-static
|
||||||
|
parent: neutron-tempest-plugin-dynamic-routing
|
||||||
|
vars:
|
||||||
|
devstack_localrc:
|
||||||
|
BGP_SCHEDULER_DRIVER: neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.StaticScheduler
|
||||||
|
devstack_local_conf:
|
||||||
|
test-config:
|
||||||
|
$TEMPEST_CONFIG:
|
||||||
|
neutron_plugin_options:
|
||||||
|
bgp_schedule_speakers_to_agents: true
|
||||||
|
|
||||||
- job:
|
- job:
|
||||||
name: neutron-dynamic-routing-functional
|
name: neutron-dynamic-routing-functional
|
||||||
parent: neutron-functional
|
parent: neutron-functional
|
||||||
|
@ -22,6 +34,7 @@
|
||||||
check:
|
check:
|
||||||
jobs:
|
jobs:
|
||||||
- neutron-dynamic-routing-functional
|
- neutron-dynamic-routing-functional
|
||||||
|
- neutron-dynamic-routing-static
|
||||||
- neutron-tempest-plugin-dynamic-routing
|
- neutron-tempest-plugin-dynamic-routing
|
||||||
gate:
|
gate:
|
||||||
jobs:
|
jobs:
|
||||||
|
|
|
@ -48,8 +48,24 @@ BGP Scheduler
|
||||||
BGP Speaker and DRAgent has 1:N association which means one BGP speaker can be
|
BGP Speaker and DRAgent has 1:N association which means one BGP speaker can be
|
||||||
scheduled on multiple DRAgents.
|
scheduled on multiple DRAgents.
|
||||||
|
|
||||||
|
There are different options for the scheduling algorithm to be used, these can
|
||||||
|
be selected via the ``bgp_drscheduler_driver`` configuration option.
|
||||||
|
|
||||||
|
StaticScheduler
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is the most simple option, which does no automatic scheduling at all.
|
||||||
|
Instead it relies on API requests to explicitly associate BGP speaker with
|
||||||
|
DRAgents and to disassociate them again.
|
||||||
|
|
||||||
|
Sample configuration::
|
||||||
|
|
||||||
|
bgp_drscheduler_driver = neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.StaticScheduler
|
||||||
|
|
||||||
Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent.
|
Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent.
|
||||||
|
|
||||||
|
.. TODO(frickler): update the examples to use OSC
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
(neutron) bgp-speaker-list
|
(neutron) bgp-speaker-list
|
||||||
|
@ -88,7 +104,22 @@ Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent.
|
||||||
|
|
||||||
(neutron)
|
(neutron)
|
||||||
|
|
||||||
.. note:: Currently, auto-scheduling is not supported.
|
ReST API's for neutron-dynamic-routing scheduler are defined as part of the
|
||||||
|
`Neutron API reference`_.
|
||||||
|
|
||||||
|
.. _Neutron API reference: https://docs.openstack.org/api-ref/network/#bgp-dynamic-routing
|
||||||
|
|
||||||
|
ChanceScheduler
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is the default option. It will automatically schedule newly created BGP
|
||||||
|
speakers to one of the active DRAgents. When a DRAgent goes down, the BGP
|
||||||
|
speaker will be disassociated from it and an attempt is made to schedule
|
||||||
|
it to a different agent. Note that this action will override any manual
|
||||||
|
associations that have been performed via the API, so you will want to use
|
||||||
|
this scheduler only in very basic deployments.
|
||||||
|
|
||||||
|
Sample configuration::
|
||||||
|
|
||||||
|
bgp_drscheduler_driver = neutron_dynamic_routing.services.bgp.scheduler.bgp_dragent_scheduler.ChanceScheduler
|
||||||
|
|
||||||
ReST API's for neutron-dynamic-routing scheduler is defined in the
|
|
||||||
API document :doc:`/reference/index`
|
|
||||||
|
|
|
@ -127,4 +127,4 @@ It manages and configures different dynamic routing stack through
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Currently, only integration with `os-ken <https://docs.openstack.org/os-ken/latest/>`_
|
Currently, only integration with `os-ken <https://docs.openstack.org/os-ken/latest/>`_
|
||||||
is supported. Future releases will add the support for Quagga, Bird, etc.
|
is supported.
|
||||||
|
|
|
@ -53,9 +53,8 @@ functionality of a dynamic routing protocol::
|
||||||
+-------------------------------+
|
+-------------------------------+
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
In the first release, only the integration with os-ken is supported. Later release will
|
Currently only the integration with os-ken is supported
|
||||||
have support for Quagga, Bird etc. Besides, BGP is the only protocol supported now
|
BGP is the only protocol supported.
|
||||||
but support for more dynamic routing protocols might come in the future.
|
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
|
|
|
@ -565,7 +565,8 @@ Service Test
|
||||||
|
|
||||||
* Schedule the BGP speaker to ``BGP dynamic routing agent``
|
* Schedule the BGP speaker to ``BGP dynamic routing agent``
|
||||||
|
|
||||||
The first BGP speaker is scheduled to the first dynamic routing agent automatically.
|
With the default scheduler configuration, the first BGP speaker is
|
||||||
|
scheduled to the first dynamic routing agent automatically.
|
||||||
So for a simple setup, there is nothing to be done here.
|
So for a simple setup, there is nothing to be done here.
|
||||||
|
|
||||||
* Verify scheduling of the BGP speaker to the agent.
|
* Verify scheduling of the BGP speaker to the agent.
|
||||||
|
|
|
@ -218,3 +218,9 @@ class WeightScheduler(base_scheduler.BaseWeightScheduler,
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(WeightScheduler, self).__init__(self)
|
super(WeightScheduler, self).__init__(self)
|
||||||
self._register_callbacks()
|
self._register_callbacks()
|
||||||
|
|
||||||
|
|
||||||
|
class StaticScheduler(BgpDrAgentFilter):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(StaticScheduler, self).__init__()
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
A new BGP scheduler has been added, called ``StaticScheduler``. It will
|
||||||
|
not perform any automatic scheduling of speakers to agents, instead
|
||||||
|
relying on API calls to perform explicit scheduling, fulfilling the
|
||||||
|
needs of larger deployments.
|
||||||
|
See also bug `1920065 <https://bugs.launchpad.net/neutron/+bug/1920065>`_.
|
||||||
|
The plan is to make the ``StaticScheduler`` the default option for the next
|
||||||
|
release and possibly deprecate the current default, ``ChanceScheduler``.
|
Loading…
Reference in New Issue