From d683804dfa046b80c9d4758ab7aa649f3ca7af18 Mon Sep 17 00:00:00 2001 From: Miguel Lavalle Date: Mon, 25 Mar 2024 17:30:01 -0500 Subject: [PATCH] Check unspecified flavor in user defined driver In order to decide whether to process a router related request, the user defined router flavor OVN driver needs to check the flavor_id specified in the request. This change adds the code to test the case when the API passed the flavor_id as unspecified. Change-Id: I4d7d9d5582b97246cad63ef7f5511b159d6c6791 Closes-Bug: #2059051 (cherry picked from commit 9d729bda207847b4c94d570eacdd26951294f49f) --- .../services/ovn_l3/service_providers/user_defined.py | 3 ++- .../ovn_l3/service_providers/test_user_defined.py | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/neutron/services/ovn_l3/service_providers/user_defined.py b/neutron/services/ovn_l3/service_providers/user_defined.py index ea1af67e3a7..e0d516ea4c3 100644 --- a/neutron/services/ovn_l3/service_providers/user_defined.py +++ b/neutron/services/ovn_l3/service_providers/user_defined.py @@ -16,6 +16,7 @@ from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources +from neutron_lib import constants as const from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory from oslo_log import log as logging @@ -44,7 +45,7 @@ class UserDefined(base.L3ServiceProvider): def _is_user_defined_provider(self, context, router): flavor_id = router.get('flavor_id') - if flavor_id is None: + if flavor_id is None or flavor_id is const.ATTR_NOT_SPECIFIED: return False flavor = self._flavor_plugin.get_flavor(context, flavor_id) provider = self._flavor_plugin.get_flavor_next_provider( diff --git a/neutron/tests/unit/services/ovn_l3/service_providers/test_user_defined.py b/neutron/tests/unit/services/ovn_l3/service_providers/test_user_defined.py index ba02b957ec6..135ec55ee13 100644 --- a/neutron/tests/unit/services/ovn_l3/service_providers/test_user_defined.py +++ b/neutron/tests/unit/services/ovn_l3/service_providers/test_user_defined.py @@ -14,6 +14,7 @@ from unittest import mock from neutron_lib.callbacks import events +from neutron_lib import constants as const from neutron.db.models import l3 @@ -56,6 +57,14 @@ class TestUserDefined(testlib_api.SqlTestCase): self.assertFalse(self.provider._is_user_defined_provider( self.context, self.router)) + # test flavor_id request not specified + self.router.flavor_id = None + self.assertFalse(self.provider._is_user_defined_provider( + self.context, self.router)) + self.router.flavor_id = const.ATTR_NOT_SPECIFIED + self.assertFalse(self.provider._is_user_defined_provider( + self.context, self.router)) + def test_router_processing(self): with mock.patch.object(user_defined.LOG, 'debug') as log: payload = events.DBEventPayload(