From 501faef2bce269ab8146f6923b4866d3c7f46efc Mon Sep 17 00:00:00 2001 From: "hailun.huang" Date: Tue, 12 Oct 2021 17:34:44 +0800 Subject: [PATCH] [ovn]Get network availability_zones from Logical_Switch Ovn driver is not support availability_zones earlier because ovn distribute dhcp server. Through this patch [1], neutron already support for Network Availability Zones in ML2/OVN. But network's availability_zones is also empty. neutron net-show ce361094-dcfa-42e7-a4b9-b4adf2223341 -c availability_zone_hints -c availability_zones [1]https://review.opendev.org/c/openstack/neutron/+/762550/ Closes-Bug: #1946713 Change-Id: I5e94080a2ece4dff4c4c52f52d9d341ea5798bc3 --- .../ml2/drivers/ovn/mech_driver/mech_driver.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py index 1045c8e53ce..31537b8ba8c 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py @@ -361,6 +361,8 @@ class OVNMechanismDriver(api.MechanismDriver): get_availability_zones) self.patch_plugin_choose("validate_availability_zones", validate_availability_zones) + self.patch_plugin_choose("get_network_availability_zones", + get_network_availability_zones) # Now IDL connections can be safely used. self._post_fork_event.set() @@ -1303,3 +1305,13 @@ def validate_availability_zones(cls, context, resource_type, if diff: raise az_exc.AvailabilityZoneNotFound( availability_zone=', '.join(diff)) + + +def get_network_availability_zones(cls, network, _driver): + lswitch = _driver._nb_ovn.get_lswitch(network['id']) + if not lswitch: + return [] + + return [az.strip() for az in lswitch.external_ids.get( + ovn_const.OVN_AZ_HINTS_EXT_ID_KEY, '').split(',') + if az.strip()]