From c4721da2d899e1c51e716577e776c6ee14e2e35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harald=20Jens=C3=A5s?= Date: Fri, 7 Jan 2022 16:03:11 +0100 Subject: [PATCH] Add dhcp options for each ip_version once Currently duplicate DHCP options are added when a port have multiple address in the same address familiy. The duplicate entries cause an internal server error in neutron. This fixes the issue by only adding DHCP options for each IP-version. Story: 2009774 Task: 44255 Change-Id: I8bef819dc3101f88f4e04ea986e1039e34d917ed --- ironic/dhcp/neutron.py | 6 +++--- ironic/tests/unit/dhcp/test_neutron.py | 6 ++++++ .../fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml diff --git a/ironic/dhcp/neutron.py b/ironic/dhcp/neutron.py index 18ccae05c2..a5cb092826 100644 --- a/ironic/dhcp/neutron.py +++ b/ironic/dhcp/neutron.py @@ -80,9 +80,9 @@ class NeutronDHCPApi(base.BaseDHCP): update_opts = [] if len(fips) != 0: - for fip in fips: - ip_version = \ - ipaddress.ip_address(fip['ip_address']).version + ip_versions = {ipaddress.ip_address(fip['ip_address']).version + for fip in fips} + for ip_version in ip_versions: for option in dhcp_options: if option.get('ip_version', 4) == ip_version: update_opts.append(option) diff --git a/ironic/tests/unit/dhcp/test_neutron.py b/ironic/tests/unit/dhcp/test_neutron.py index 8d87345d28..9a1f28ddbc 100644 --- a/ironic/tests/unit/dhcp/test_neutron.py +++ b/ironic/tests/unit/dhcp/test_neutron.py @@ -165,8 +165,14 @@ class TestNeutron(db_base.DbTestCase): { "ip_address": "192.168.1.3", }, + { + "ip_address": "192.168.1.4", + }, { "ip_address": "2001:db8::201", + }, + { + "ip_address": "2001:db8::202", } ], } diff --git a/releasenotes/notes/fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml b/releasenotes/notes/fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml new file mode 100644 index 0000000000..13ce1003ff --- /dev/null +++ b/releasenotes/notes/fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixed an issue where duplicate extra DHCP options was passed in the port + update request to the Networking service. The duplicate DHCP options + caused an error in the Networking service and node provisioning would + fail. See bug: + `2009774 `_.