summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Jensås <hjensas@redhat.com>2022-01-07 16:03:11 +0100
committerHarald Jensås <hjensas@redhat.com>2022-01-10 17:28:23 +0000
commit9a4ba7d27d31f2c7a6554bdb2e9e3dd03e001f58 (patch)
treec037e367d9f4a7e5ed344dbfd16d1a5bf7d9141e
parentb3ea14f863fec2c309eafc3099bfa0aa72ee3324 (diff)
downloadironic-9a4ba7d27d31f2c7a6554bdb2e9e3dd03e001f58.tar.gz
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 (cherry picked from commit c4721da2d899e1c51e716577e776c6ee14e2e35e)
-rw-r--r--ironic/dhcp/neutron.py6
-rw-r--r--ironic/tests/unit/dhcp/test_neutron.py6
-rw-r--r--releasenotes/notes/fix-duplcate-extra-dhcp-options-4edb729cb5bcf552.yaml8
3 files changed, 17 insertions, 3 deletions
diff --git a/ironic/dhcp/neutron.py b/ironic/dhcp/neutron.py
index 18ccae05c..a5cb09282 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 8d87345d2..9a1f28ddb 100644
--- a/ironic/tests/unit/dhcp/test_neutron.py
+++ b/ironic/tests/unit/dhcp/test_neutron.py
@@ -166,7 +166,13 @@ 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 000000000..13ce1003f
--- /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 <https://storyboard.openstack.org/#!/story/2009774>`_.