[Bug 2126923] Re: [SRU] ovn_dhcp4_global_options doesn't support keys with a list of values
Leah Goldberg
2126923 at bugs.launchpad.net
Mon Mar 23 19:50:37 UTC 2026
********** Verification for FLAMINGO (UCA) **********
##### Before enabling -proposed #####
# current installed package
ubuntu at rs-noble-flamingo:~/regress-stack$ apt-cache policy neutron-api
neutron-api:
Installed: 2:27.0.0-0ubuntu1~cloud0
Candidate: 2:27.0.0-0ubuntu1~cloud0
Version table:
*** 2:27.0.0-0ubuntu1~cloud0 500
500 http://ubuntu-cloud.archive.canonical.com/ubuntu noble-updates/flamingo/main amd64 Packages
100 /var/lib/dpkg/status
# Changed the value of `ovn_dhcp4_global_options`
# to contain multiple values in the `ml2_conf.ini` file
sudo micro /etc/neutron/plugins/ml2/ml2_conf.ini
ovn_dhcp4_global_options = ntp_server:1.2.3.4,wpad:1.2.3.5;1.2.3.6
# Restart Apache2 to apply the changes, since Neutron API runs under
WSGI
ubuntu at rs-noble-flamingo:~$ sudo systemctl restart apache2
ubuntu at rs-noble-flamingo:~$ sudo systemctl daemon-reload
# Create a new network and subnet
ubuntu at rs-noble-flamingo:~$ openstack network create test-network
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2026-03-23T19:43:59Z |
| description | |
| dns_domain | |
| id | 8571e7a5-241a-4f56-9ca7-c7eee1b9bda3 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | False |
| l2_adjacency | True |
| mtu | 1442 |
| name | test-network |
| port_security_enabled | True |
| project_id | f2127fa8c4be449ebf96c69a85845fdb |
| provider:network_type | geneve |
| provider:physical_network | None |
| provider:segmentation_id | 24706 |
| qinq | False |
| qos_policy_id | None |
| revision_number | 1 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| tenant_id | f2127fa8c4be449ebf96c69a85845fdb |
| updated_at | 2026-03-23T19:43:59Z |
+---------------------------+--------------------------------------+
ubuntu at rs-noble-flamingo:~$ openstack subnet create --network test-network --subnet-range 192.168.100.0/24 --dhcp test-subnet
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| allocation_pools | 192.168.100.2-192.168.100.254 |
| cidr | 192.168.100.0/24 |
| created_at | 2026-03-23T19:44:12Z |
| description | |
| dns_nameservers | |
| dns_publish_fixed_ip | None |
| enable_dhcp | True |
| gateway_ip | 192.168.100.1 |
| host_routes | |
| id | e9fd6f3c-5dfb-4b5f-b20a-57ed52eb624c |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | test-subnet |
| network_id | 8571e7a5-241a-4f56-9ca7-c7eee1b9bda3 |
| project_id | f2127fa8c4be449ebf96c69a85845fdb |
| revision_number | 0 |
| router:external | False |
| segment_id | None |
| service_types | |
| subnetpool_id | None |
| tags | |
| updated_at | 2026-03-23T19:44:12Z |
+----------------------+--------------------------------------+
# See that multiple values are parsed incorrectly
ubuntu at rs-noble-flamingo:~$ sudo ovn-nbctl list DHCP_Options
_uuid : 2857da41-3a6b-4883-b09d-5b5da5c06d30
cidr : "192.168.100.0/24"
external_ids : {"neutron:revision_number"="0", subnet_id="e9fd6f3c-5dfb-4b5f-b20a-57ed52eb624c"}
options : {classless_static_route="{169.254.169.254/32,192.168.100.2, 0.0.0.0/0,192.168.100.1}", dns_server="{127.0.0.53}", lease_time="600", mtu="1442", ntp_server="1.2.3.4", router="192.168.100.1", server_id="192.168.100.1", server_mac="fa:16:3e:c1:b3:49", wpad="1.2.3.5;1.2.3.6"}
*** Note wpad="1.2.3.5;1.2.3.6" (semi-colon) is incorrect
# Delete the network and subnet
ubuntu at rs-noble-flamingo:~$ openstack subnet delete test-subnet
ubuntu at rs-noble-flamingo:~$ openstack network delete test-network
### Enabling -proposed #####
ubuntu at rs-noble-flamingo:~/regress-stack$ sudo add-apt-repository cloud-
archive:flamingo-proposed
ubuntu at rs-noble-flamingo:~$ sudo apt update
ubuntu at rs-noble-flamingo:~$ sudo apt install -y \
neutron-server=2:27.0.0-0ubuntu1.1~cloud0 \
neutron-common=2:27.0.0-0ubuntu1.1~cloud0 \
neutron-plugin-ml2=2:27.0.0-0ubuntu1.1~cloud0 \
python3-neutron=2:27.0.0-0ubuntu1.1~cloud0
##### After enabling -proposed #####
# installed package
ubuntu at rs-noble-flamingo:~$ apt-cache policy neutron-api
neutron-api:
Installed: 2:27.0.0-0ubuntu1.1~cloud0
Candidate: 2:27.0.0-0ubuntu1.1~cloud0
Version table:
*** 2:27.0.0-0ubuntu1.1~cloud0 500
500 http://ubuntu-cloud.archive.canonical.com/ubuntu noble-proposed/flamingo/main amd64 Packages
100 /var/lib/dpkg/status
2:27.0.0-0ubuntu1~cloud0 500
500 http://ubuntu-cloud.archive.canonical.com/ubuntu noble-updates/flamingo/main amd64 Packages
# Create a new network and subnet again
ubuntu at rs-noble-flamingo:~$ openstack network create test-network
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2026-03-23T19:48:28Z |
| description | |
| dns_domain | |
| id | 81a6440c-3a59-4fbb-8c85-a396f0c155b3 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | False |
| l2_adjacency | True |
| mtu | 1442 |
| name | test-network |
| port_security_enabled | True |
| project_id | f2127fa8c4be449ebf96c69a85845fdb |
| provider:network_type | geneve |
| provider:physical_network | None |
| provider:segmentation_id | 28007 |
| qinq | False |
| qos_policy_id | None |
| revision_number | 1 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| tenant_id | f2127fa8c4be449ebf96c69a85845fdb |
| updated_at | 2026-03-23T19:48:28Z |
+---------------------------+--------------------------------------+
ubuntu at rs-noble-flamingo:~$ openstack subnet create --network test-network --subnet-range 192.168.100.0/24 --dhcp test-subnet
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| allocation_pools | 192.168.100.2-192.168.100.254 |
| cidr | 192.168.100.0/24 |
| created_at | 2026-03-23T19:48:42Z |
| description | |
| dns_nameservers | |
| dns_publish_fixed_ip | None |
| enable_dhcp | True |
| gateway_ip | 192.168.100.1 |
| host_routes | |
| id | 159617ff-a2dd-46ab-b20c-eec79bc5317e |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | test-subnet |
| network_id | 81a6440c-3a59-4fbb-8c85-a396f0c155b3 |
| project_id | f2127fa8c4be449ebf96c69a85845fdb |
| revision_number | 0 |
| router:external | False |
| segment_id | None |
| service_types | |
| subnetpool_id | None |
| tags | |
| updated_at | 2026-03-23T19:48:42Z |
+----------------------+--------------------------------------+
# See that multiple values are parsed correctly
ubuntu at rs-noble-flamingo:~$ sudo ovn-nbctl list DHCP_Options
_uuid : e3b6e945-410c-40b5-8084-93874192b8df
cidr : "192.168.100.0/24"
external_ids : {"neutron:revision_number"="0", subnet_id="159617ff-a2dd-46ab-b20c-eec79bc5317e"}
options : {classless_static_route="{169.254.169.254/32,192.168.100.2, 0.0.0.0/0,192.168.100.1}", dns_server="{127.0.0.53}", lease_time="600", mtu="1442", ntp_server="1.2.3.4", router="192.168.100.1", server_id="192.168.100.1", server_mac="fa:16:3e:5b:d3:50", wpad="{1.2.3.5, 1.2.3.6}"}
*** Note wpad="1.2.3.5,1.2.3.6" (comma) is now correct
# Skipping checking if neutron-api is okay, since it is not a service
***********************************************
I confirm that neutron-api version 2:27.0.0-0ubuntu1.1~cloud0
from noble-proposed/flamingo fixes LP: #2126923 on Flamingo (UCA).
** Tags removed: verification-flamingo-needed verification-needed
** Tags added: verification-done verification-flamingo-done
--
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to Ubuntu Cloud Archive.
https://bugs.launchpad.net/bugs/2126923
Title:
[SRU] ovn_dhcp4_global_options doesn't support keys with a list of
values
Status in Ubuntu Cloud Archive:
Fix Committed
Status in Ubuntu Cloud Archive caracal series:
Fix Committed
Status in Ubuntu Cloud Archive dalmatian series:
Fix Committed
Status in Ubuntu Cloud Archive epoxy series:
Fix Committed
Status in Ubuntu Cloud Archive flamingo series:
Fix Committed
Status in neutron:
Fix Released
Status in neutron package in Ubuntu:
Fix Committed
Status in neutron source package in Noble:
Fix Committed
Status in neutron source package in Questing:
Fix Committed
Bug description:
[ Impact ]
* The Neutron configuration option `ovn_dhcp4_global_options` does not
correctly support multiple values for DHCP keys. When multiple values are
specified the neutron-server fails while parsing the configuration and does
not start.
* Backporting this fix would allow users to list multiple values in the
`ovn_dhcp4_global_options` without requiring configuration workarounds.
* The uploaded fix allows the config file, `ml2_conf.ini`, to correctly handle
multiple values in `ovn_dhcp4_global_options`.
[ UPDATED Test Plan ]
* [0] The following versions of Ubuntu-OpenStack will be tested
- UCA: jammy-caracal
- UCA: noble-dalmatian
- UCA: noble-epoxy
- UCA: noble-flamingo
- ubuntu: noble-caracal
- ubuntu: questing-flamingo
* [1] Deploy an OpenStack environment on the target series using regress-stack
in a multipass VM. For Jammy/Noble, it can be set up following the
instructions on the regress-stack README.md.
For Questing, follow these instructions:
https://github.com/canonical/se-wiki/wiki/Regress-Stack-How-to
* [2] Edit the `ml2_conf.ini` file and change `ovn_dhcp4_global_options` to
contain multiple values like
`ovn_dhcp4_global_options = ntp_server:1.2.3.4,wpad:1.2.3.5;1.2.3.6`
* [3] Restart the neutron server after updating the `ml2_conf.ini` file
Jammy/Noble: sudo systemctl restart neutron-server
Questing: sudo systemctl restart apache2
(neutron-api is managed by WSGI/Apache)
* [4] Create a new network and a subnet on that network
`openstack network create test-network`
`openstack subnet create \
--network test-network \
--subnet-range 192.168.100.0/24 \
--dhcp \
test-subnet`
* [5] Check to see that multiple values are parsed incorrectly in
OVN Northbound database
`sudo ovn-nbctl list DHCP_Options`
Incorrect options will look like wpad="1.2.3.5;1.2.3.6"
(with a semi-colon)
* [6] Delete the network and subnet created
`openstack subnet delete test-subnet`
`openstack network delete test-network`
* [7] Apply the patch
* [8] Create a new network and subnet again
(using same commands from step 4)
* [9] Check to see that multiple values are now parsed correctly in
OVN Northbound database.
Correct options will look like wpad="{1.2.3.5, 1.2.3.6}"
(with a comma)
* [10] Check the status of the neutron server to make sure it is running.
Jammy/Noble: sudo systemctl status neutron-server
Questing: sudo systemctl status apache2
(neutron-api is managed by WSGI/Apache)
[ Where problems could occur ]
* This change modifies how `ovn_dhcp4_global_options` options are parsed. A
regression could possibly cause a failure to apply DHCP options all together
due to an incorrect formatting in options sent to OVN.
[ Other Info ]
* Upstream commit to neutron (master):
https://review.opendev.org/c/openstack/neutron/+/963944
===========================================================
[ Original Bug Description ]
When using `ovn_dhcp4_global_options` under `[ovn]` in `ml2_conf.ini`
it will cause `neutron server` to crash when attempting to parse the
configuration if a key provided contains a list seperated by commas.
For example if setting `domain_search_list` with more than one domain.
```
[ovn]
ovn_dhcp4_global_options = domain_search_list:foo.bar,baz.qux
```
Expected output would be that `neutron server` doesn't crash when
attempting to parse such configuration and correctly applies these
options within `OVN`.
Experienced within OpenStack Epoxy.
Not currently blocking anything as it is possible to patch
`_get_ovn_dhcpv4_opts` in
`neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py` with
the following
```
options['domain_search_list'] = "\"foo.bar,baz.qux\""
```
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/2126923/+subscriptions
More information about the Ubuntu-openstack-bugs
mailing list