From cfd87ccba1a5a667ce6a917c6bb741a53c8a8ff6 Mon Sep 17 00:00:00 2001 From: Anton Kurbatov Date: Wed, 28 Sep 2022 18:48:45 +0000 Subject: [PATCH] Fix full graph loadbalancer creation if jobboard is disabled This patch fixes the creation of a full loadbalancer graph in case the jobboard_enabled config value is False, when no "listeners" parameter was passed to the get_create_load_balancer_flow function call: use kwargs as the flow creation function parameters and handle "store" separately. Story 2010335 Task 46462 Signed-off-by: Anton Kurbatov Change-Id: Id328b27db1ec9c8e17bf18120259e41e75dab3b9 (cherry picked from commit 216cce39c9c22831d725703f41c54b9305d65dc8) --- .../controller/worker/v2/controller_worker.py | 3 +- .../worker/v2/test_controller_worker.py | 47 +++++++++++++++++++ ...ncer-creation-if-jobboard-is-disabled.yaml | 5 ++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-full-graph-loadbalancer-creation-if-jobboard-is-disabled.yaml diff --git a/octavia/controller/worker/v2/controller_worker.py b/octavia/controller/worker/v2/controller_worker.py index 5d6136fea4..e88d0c0abd 100644 --- a/octavia/controller/worker/v2/controller_worker.py +++ b/octavia/controller/worker/v2/controller_worker.py @@ -102,8 +102,9 @@ class ControllerWorker(object): if CONF.task_flow.jobboard_enabled: self.services_controller.run_poster(func, *args, **kwargs) else: + store = kwargs.pop('store', None) tf = self.tf_engine.taskflow_load( - func(*args), **kwargs) + func(*args, **kwargs), store=store) with tf_logging.DynamicLoggingListener(tf, log=LOG): tf.run() diff --git a/octavia/tests/unit/controller/worker/v2/test_controller_worker.py b/octavia/tests/unit/controller/worker/v2/test_controller_worker.py index 1f00250809..0f0d50609a 100644 --- a/octavia/tests/unit/controller/worker/v2/test_controller_worker.py +++ b/octavia/tests/unit/controller/worker/v2/test_controller_worker.py @@ -652,6 +652,53 @@ class TestControllerWorker(base.TestCase): constants.TOPOLOGY_ACTIVE_STANDBY, listeners=dict_listeners, store=store) + @mock.patch('octavia.controller.worker.v2.flows.load_balancer_flows.' + 'LoadBalancerFlows.get_create_load_balancer_flow') + @mock.patch('octavia.common.base_taskflow.BaseTaskFlowEngine.' + 'taskflow_load') + def test_create_load_balancer_full_graph_jobboard_disabled( + self, + mock_base_taskflow_load, + mock_get_create_load_balancer_flow, + mock_api_get_session, + mock_dyn_log_listener, + mock_taskflow_load, + mock_pool_repo_get, + mock_member_repo_get, + mock_l7rule_repo_get, + mock_l7policy_repo_get, + mock_listener_repo_get, + mock_lb_repo_get, + mock_health_mon_repo_get, + mock_amp_repo_get): + + self.conf.config(group="task_flow", jobboard_enabled=False) + + listeners = [data_models.Listener(id='listener1'), + data_models.Listener(id='listener2')] + dict_listeners = [listener.to_dict() for listener in + provider_utils.db_listeners_to_provider_listeners( + listeners)] + lb = data_models.LoadBalancer(id=LB_ID, listeners=listeners, + topology=constants.TOPOLOGY_SINGLE) + mock_lb_repo_get.return_value = lb + store = { + constants.LOADBALANCER_ID: LB_ID, + 'update_dict': {'topology': constants.TOPOLOGY_SINGLE}, + constants.BUILD_TYPE_PRIORITY: constants.LB_CREATE_NORMAL_PRIORITY, + constants.FLAVOR: None, + constants.SERVER_GROUP_ID: None, + constants.AVAILABILITY_ZONE: None, + } + + cw = controller_worker.ControllerWorker() + cw.create_load_balancer(_load_balancer_mock) + + mock_get_create_load_balancer_flow.assert_called_with( + constants.TOPOLOGY_SINGLE, listeners=dict_listeners) + mock_base_taskflow_load.assert_called_with( + mock_get_create_load_balancer_flow.return_value, store=store) + def test_delete_load_balancer_without_cascade(self, mock_api_get_session, mock_dyn_log_listener, diff --git a/releasenotes/notes/fix-full-graph-loadbalancer-creation-if-jobboard-is-disabled.yaml b/releasenotes/notes/fix-full-graph-loadbalancer-creation-if-jobboard-is-disabled.yaml new file mode 100644 index 0000000000..9325469e8f --- /dev/null +++ b/releasenotes/notes/fix-full-graph-loadbalancer-creation-if-jobboard-is-disabled.yaml @@ -0,0 +1,5 @@ +--- +fixes: +- | + Fix a bug when full graph of load balancer is created without + listeners if jobboard_enabled=False