Merge "Subnet filter by "router:external" needs to be changed to "external""

This commit is contained in:
Zuul 2025-04-30 15:14:55 +00:00 committed by Gerrit Code Review
commit 7c0aac975a
2 changed files with 10 additions and 17 deletions

View File

@ -51,6 +51,15 @@ def _network_result_filter_hook(query, filters):
return query.filter(~models_v2.Network.external.has())
def _subnet_result_filter_hook(query, filters):
vals = filters and filters.get(extnet_apidef.EXTERNAL, [])
if not vals:
return query
if vals[0]:
return query.filter(models_v2.Subnet.external.has())
return query.filter(~models_v2.Subnet.external.has())
@resource_extend.has_resource_extenders
@registry.has_registry_receivers
class External_net_db_mixin:
@ -70,7 +79,7 @@ class External_net_db_mixin:
"external_subnet",
query_hook=None,
filter_hook=None,
result_filters=None,
result_filters=_subnet_result_filter_hook,
rbac_actions=EXTERNAL_NETWORK_RBAC_ACTIONS,
)
return super().__new__(cls, *args, **kwargs)

View File

@ -11,7 +11,6 @@
# under the License.
import netaddr
from neutron_lib.api.definitions import external_net
from neutron_lib.api import validators
from neutron_lib import constants as const
from neutron_lib.db import model_query
@ -319,21 +318,6 @@ class Subnet(base.NeutronDbObject):
setattr(self, 'external', external_network)
self.obj_reset_changes(['external'])
@classmethod
def get_objects(cls, context, _pager=None, validate_filters=True,
fields=None, return_db_obj=False, **kwargs):
external = kwargs.pop(external_net.EXTERNAL, None)
if isinstance(external, list):
external = external[0]
subnets = super().get_objects(
context, _pager=_pager, validate_filters=validate_filters,
fields=fields, return_db_obj=return_db_obj, **kwargs)
if external is not None:
return [subnet for subnet in subnets if
subnet.external == external]
return subnets
def from_db_object(self, db_obj):
super().from_db_object(db_obj)
self._load_dns_publish_fixed_ip(db_obj)