diff --git a/.zuul.yaml b/.zuul.yaml index 383233c7..3fc7780b 100644 --- a/.zuul.yaml +++ b/.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: name: neutron-dynamic-routing-functional parent: neutron-functional @@ -20,6 +32,7 @@ check: jobs: - neutron-dynamic-routing-functional + - neutron-dynamic-routing-static - neutron-tempest-plugin-dynamic-routing gate: jobs: diff --git a/doc/source/admin/agent-scheduler.rst b/doc/source/admin/agent-scheduler.rst index 9eb229ef..77904bf6 100644 --- a/doc/source/admin/agent-scheduler.rst +++ b/doc/source/admin/agent-scheduler.rst @@ -48,8 +48,24 @@ BGP Scheduler BGP Speaker and DRAgent has 1:N association which means one BGP speaker can be 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. +.. TODO(frickler): update the examples to use OSC + :: (neutron) bgp-speaker-list @@ -88,7 +104,22 @@ Here is an example to associate/disassociate a BGP Speaker to/from a DRAgent. (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` diff --git a/doc/source/admin/system-design.rst b/doc/source/admin/system-design.rst index bb971069..10d574c1 100644 --- a/doc/source/admin/system-design.rst +++ b/doc/source/admin/system-design.rst @@ -127,4 +127,4 @@ It manages and configures different dynamic routing stack through .. note:: Currently, only integration with `os-ken `_ - is supported. Future releases will add the support for Quagga, Bird, etc. + is supported. diff --git a/doc/source/contributor/dragent-drivers.rst b/doc/source/contributor/dragent-drivers.rst index 8313af76..64466dd5 100644 --- a/doc/source/contributor/dragent-drivers.rst +++ b/doc/source/contributor/dragent-drivers.rst @@ -53,9 +53,8 @@ functionality of a dynamic routing protocol:: +-------------------------------+ .. note:: - In the first release, only the integration with os-ken is supported. Later release will - have support for Quagga, Bird etc. Besides, BGP is the only protocol supported now - but support for more dynamic routing protocols might come in the future. + Currently only the integration with os-ken is supported + BGP is the only protocol supported. Configuration diff --git a/doc/source/contributor/testing.rst b/doc/source/contributor/testing.rst index ff2f7fbc..405ba13b 100644 --- a/doc/source/contributor/testing.rst +++ b/doc/source/contributor/testing.rst @@ -565,7 +565,8 @@ Service Test * 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. * Verify scheduling of the BGP speaker to the agent. diff --git a/neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py b/neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py index 5f55188b..6608dcf7 100644 --- a/neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py +++ b/neutron_dynamic_routing/services/bgp/scheduler/bgp_dragent_scheduler.py @@ -217,3 +217,9 @@ class WeightScheduler(base_scheduler.BaseWeightScheduler, def __init__(self): super(WeightScheduler, self).__init__(self) self._register_callbacks() + + +class StaticScheduler(BgpDrAgentFilter): + + def __init__(self): + super(StaticScheduler, self).__init__() diff --git a/releasenotes/notes/add-static-scheduler-a3b0f54b964ae306.yaml b/releasenotes/notes/add-static-scheduler-a3b0f54b964ae306.yaml new file mode 100644 index 00000000..eccf9741 --- /dev/null +++ b/releasenotes/notes/add-static-scheduler-a3b0f54b964ae306.yaml @@ -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 `_. + The plan is to make the ``StaticScheduler`` the default option for the next + release and possibly deprecate the current default, ``ChanceScheduler``.