***** Verification for NOBLE (LTS) *****

##### Before enabling -proposed #####

# current installed package

ubuntu@rs-noble-caracal:~/regress-stack$ apt-cache policy neutron-server
neutron-server:
  Installed: 2:24.1.0-0ubuntu1
  Candidate: 2:24.1.0-0ubuntu1
  Version table:
 *** 2:24.1.0-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     2:24.0.0-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages

# Editing the `ml2_conf.ini` file

sudo micro /etc/neutron/plugins/ml2/ml2_conf.ini

# Changed the value of `ovn_dhcp4_global_options` to contain multiple
values

ovn_dhcp4_global_options = ntp_server:1.2.3.4,wpad:1.2.3.5;1.2.3.6

# Restart the neutron server

ubuntu@rs-noble-caracal:~$ sudo systemctl restart neutron-server
ubuntu@rs-noble-caracal:~$ sudo systemctl daemon-reload

# Create a new network

ubuntu@rs-noble-caracal:~$ openstack network create test-network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2026-03-20T19:16:52Z                 |
| description               |                                      |
| dns_domain                |                                      |
| id                        | 758cf395-dabc-463a-8e1e-e9bc7956cffd |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| is_vlan_transparent       | None                                 |
| l2_adjacency              | True                                 |
| mtu                       | 1442                                 |
| name                      | test-network                         |
| port_security_enabled     | True                                 |
| project_id                | d453b4c0b04e415eb7816336ac2a1c1a     |
| provider:network_type     | None                                 |
| provider:physical_network | None                                 |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 1                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | d453b4c0b04e415eb7816336ac2a1c1a     |
| updated_at                | 2026-03-20T19:16:53Z                 |
+---------------------------+--------------------------------------+

# Create a new subnet on that network

ubuntu@rs-noble-caracal:~$ 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-20T19:17:13Z                 |
| description          |                                      |
| dns_nameservers      |                                      |
| dns_publish_fixed_ip | None                                 |
| enable_dhcp          | True                                 |
| gateway_ip           | 192.168.100.1                        |
| host_routes          |                                      |
| id                   | 844ce809-d178-4eda-a2d4-b82b0efaeede |
| ip_version           | 4                                    |
| ipv6_address_mode    | None                                 |
| ipv6_ra_mode         | None                                 |
| name                 | test-subnet                          |
| network_id           | 758cf395-dabc-463a-8e1e-e9bc7956cffd |
| project_id           | d453b4c0b04e415eb7816336ac2a1c1a     |
| revision_number      | 0                                    |
| segment_id           | None                                 |
| service_types        |                                      |
| subnetpool_id        | None                                 |
| tags                 |                                      |
| updated_at           | 2026-03-20T19:17:13Z                 |
+----------------------+--------------------------------------+

# See that multiple values are parsed incorrectly

ubuntu@rs-noble-caracal:~$ sudo ovn-nbctl list DHCP_Options

_uuid               : d67464b9-5fb3-4434-b1ca-11d6ee4eb65f
cidr                : "192.168.100.0/24"
external_ids        : {"neutron:revision_number"="0", 
subnet_id="844ce809-d178-4eda-a2d4-b82b0efaeede"}
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:16:5e:ae", 
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@rs-noble-caracal:~$ openstack subnet delete test-subnet
ubuntu@rs-noble-caracal:~$ openstack network delete test-network

### Enabling -proposed #####

ubuntu@rs-noble-caracal:~$ sudo add-apt-repository "deb
http://archive.ubuntu.com/ubuntu/ noble-proposed main restricted
universe multiverse"

ubuntu@rs-noble-caracal:~$ sudo apt update

ubuntu@rs-noble-caracal:~$ sudo apt install -y \
    neutron-server=2:24.1.0-0ubuntu1.1 \
    neutron-common=2:24.1.0-0ubuntu1.1 \
    neutron-plugin-ml2=2:24.1.0-0ubuntu1.1 \
    python3-neutron=2:24.1.0-0ubuntu1.1

##### After enabling -proposed #####

# installed package

ubuntu@rs-noble-caracal:~$ apt-cache policy neutron-server
neutron-server:
  Installed: 2:24.1.0-0ubuntu1.1
  Candidate: 2:24.1.0-0ubuntu1.1
  Version table:
 *** 2:24.1.0-0ubuntu1.1 100
        100 http://archive.ubuntu.com/ubuntu noble-proposed/main amd64 Packages
        100 /var/lib/dpkg/status
     2:24.1.0-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
     2:24.0.0-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages

# Create a new network and subnet again

ubuntu@rs-noble-caracal:~$ openstack network create test-network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2026-03-20T19:28:58Z                 |
| description               |                                      |
| dns_domain                |                                      |
| id                        | cebb2d47-966a-41e5-ba15-44bfbc1f007b |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| is_vlan_transparent       | None                                 |
| l2_adjacency              | True                                 |
| mtu                       | 1442                                 |
| name                      | test-network                         |
| port_security_enabled     | True                                 |
| project_id                | d453b4c0b04e415eb7816336ac2a1c1a     |
| provider:network_type     | None                                 |
| provider:physical_network | None                                 |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 1                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | d453b4c0b04e415eb7816336ac2a1c1a     |
| updated_at                | 2026-03-20T19:28:58Z                 |
+---------------------------+--------------------------------------+


ubuntu@rs-noble-caracal:~$ 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-20T19:29:08Z                 |
| description          |                                      |
| dns_nameservers      |                                      |
| dns_publish_fixed_ip | None                                 |
| enable_dhcp          | True                                 |
| gateway_ip           | 192.168.100.1                        |
| host_routes          |                                      |
| id                   | dd8ca8c8-fe5d-4945-a4fc-66caaa100cd8 |
| ip_version           | 4                                    |
| ipv6_address_mode    | None                                 |
| ipv6_ra_mode         | None                                 |
| name                 | test-subnet                          |
| network_id           | cebb2d47-966a-41e5-ba15-44bfbc1f007b |
| project_id           | d453b4c0b04e415eb7816336ac2a1c1a     |
| revision_number      | 0                                    |
| segment_id           | None                                 |
| service_types        |                                      |
| subnetpool_id        | None                                 |
| tags                 |                                      |
| updated_at           | 2026-03-20T19:29:08Z                 |
+----------------------+--------------------------------------+

 
# See that multiple values are parsed correctly 

ubuntu@rs-noble-caracal:~$ sudo ovn-nbctl list DHCP_Options

_uuid               : e8dc9498-22df-4b17-8c78-b426fa4f2691
cidr                : "192.168.100.0/24"
external_ids        : {"neutron:revision_number"="0", 
subnet_id="dd8ca8c8-fe5d-4945-a4fc-66caaa100cd8"}
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:07:c3:15", wpad="{1.2.3.5, 
1.2.3.6}"}

* Note wpad="1.2.3.5,1.2.3.6" (comma) is now correct

# Checking neutron-server status is okay

ubuntu@rs-noble-caracal:~$  sudo systemctl status neutron-server
● neutron-server.service - OpenStack Neutron Server
     Loaded: loaded (/usr/lib/systemd/system/neutron-server.service; enabled; 
preset: enabled)
     Active: active (running) since Fri 2026-03-20 15:28:45 EDT; 5min ago
       Docs: man:neutron-server(1)
   Main PID: 6420 (/usr/bin/python)
      Tasks: 6 (limit: 19137)
     Memory: 360.1M (peak: 360.8M)
        CPU: 10.844s
     [...]

***********************************************

I confirm that neutron-server version 2:24.1.0-0ubuntu1.1 from noble-proposed 
fixes LP: #2126923 on Noble (LTS).

** Description changed:

  [ 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.
+  * 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.
+  * 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`.
+  * The uploaded fix allows the config file, `ml2_conf.ini`, to correctly 
handle
+    multiple values in `ovn_dhcp4_global_options`.
  
- [ Test Plan ]
+ [ 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
         - LTS: noble-caracal
         - LTS: 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. 
-        
+        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] Check the status of the neutron server to see that it is active/running
+  * [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 neutron-rpc-server.service
+ 
+  * [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 neutron-rpc-server.service
-  
-  * [3] Edit the `ml2_conf.ini` file and change `ovn_dhcp4_global_options` to
-        contain multiple values like `ovn_dhcp4_global_options = 
foo.bar;baz.qux`
-  
-  * [4] Stop the neutron-server
-        Jammy/Noble: sudo systemctl stop neutron-server
-        Questing: sudo systemctl stop neutron-rpc-server.service
- 
-  * [5] Start the neutron-server and watch it fail to start
-        Jammy/Noble: sudo systemctl start neutron-server
-        Questing: sudo systemctl start neutron-rpc-server.service
- 
-  * [6] Apply the patch.
-    
-  * [7] Stop, start, and check status of neutron-server again.
-        Before the patch, it will not start correctly. 
-        After the patch, it should start correctly.
  
  [ 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.
+  * 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 
+  * 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.
+ 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\""
  ```

** Tags removed: verification-needed-noble
** Tags added: verification-done-noble

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2126923

Title:
  ovn_dhcp4_global_options doesn't support keys with a list of values

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/2126923/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to