Skip to content

Commit cdac010

Browse files
authored
Merge pull request #115 from stackhpc/upstream/zed-2024-01-22
Synchronise zed with upstream
2 parents 851d5cb + 02a497c commit cdac010

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

neutron/db/db_base_plugin_v2.py

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -643,32 +643,39 @@ def _validate_subnet(self, context, s, cur_subnet=None):
643643
"supported if enable_dhcp is True.")
644644
raise exc.InvalidInput(error_message=error_message)
645645

646-
if validators.is_attr_set(s.get('gateway_ip')):
647-
self._validate_ip_version(ip_ver, s['gateway_ip'], 'gateway_ip')
648-
if has_cidr:
649-
is_gateway_not_valid = (
650-
ipam.utils.check_gateway_invalid_in_subnet(
651-
s['cidr'], s['gateway_ip']))
652-
if is_gateway_not_valid:
653-
error_message = _("Gateway is not valid on subnet")
654-
raise exc.InvalidInput(error_message=error_message)
655-
# Ensure the gateway IP is not assigned to any port
656-
# skip this check in case of create (s parameter won't have id)
646+
gateway_ip = s.get('gateway_ip', constants.ATTR_NOT_SPECIFIED)
647+
if validators.is_attr_set(gateway_ip) or gateway_ip is None:
648+
# Validate the gateway IP, if defined in the request.
649+
if s['gateway_ip']:
650+
self._validate_ip_version(ip_ver, gateway_ip, 'gateway_ip')
651+
if has_cidr:
652+
is_gateway_not_valid = (
653+
ipam.utils.check_gateway_invalid_in_subnet(
654+
s['cidr'], gateway_ip))
655+
if is_gateway_not_valid:
656+
error_message = _("Gateway is not valid on subnet")
657+
raise exc.InvalidInput(error_message=error_message)
658+
659+
# Ensure the current subnet gateway IP is not assigned to any port.
660+
# The subnet gateway IP cannot be modified or removed if in use
661+
# (assigned to a router interface).
662+
# Skip this check in case of create (s parameter won't have id).
657663
# NOTE(salv-orlando): There is slight chance of a race, when
658664
# a subnet-update and a router-interface-add operation are
659665
# executed concurrently
660-
s_gateway_ip = netaddr.IPAddress(s['gateway_ip'])
666+
s_gateway_ip = (netaddr.IPAddress(gateway_ip) if gateway_ip else
667+
None)
661668
if (cur_subnet and
662669
s_gateway_ip != cur_subnet['gateway_ip'] and
663670
not ipv6_utils.is_ipv6_pd_enabled(s)):
664-
gateway_ip = str(cur_subnet['gateway_ip'])
671+
current_gateway_ip = str(cur_subnet['gateway_ip'])
665672
alloc = port_obj.IPAllocation.get_alloc_routerports(
666-
context, cur_subnet['id'], gateway_ip=gateway_ip,
673+
context, cur_subnet['id'], gateway_ip=current_gateway_ip,
667674
first=True)
668675

669676
if alloc and alloc.port_id:
670677
raise exc.GatewayIpInUse(
671-
ip_address=gateway_ip,
678+
ip_address=current_gateway_ip,
672679
port_id=alloc.port_id)
673680

674681
if validators.is_attr_set(s.get('dns_nameservers')):

neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,8 @@ def notify(self, event, row, updates=None):
667667
class BaseOvnSbIdl(Ml2OvnIdlBase):
668668
@classmethod
669669
def from_server(cls, connection_string, helper):
670+
if 'Chassis_Private' in helper.schema_json['tables']:
671+
helper.register_table('Chassis_Private')
670672
helper.register_table('Chassis')
671673
helper.register_table('Encap')
672674
helper.register_table('Port_Binding')
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
fixes:
3+
- |
4+
[`bug 2036423 <https://bugs.launchpad.net/neutron/+bug/2036423>`_]
5+
Now it is not possible to delete a subnet gateway IP if that subnet has a
6+
router interface; the subnet gateway IP modification was already forbidden.

0 commit comments

Comments
 (0)