Skip to content

Enable OVN-native BGP in bgp_dt01#720

Merged
centosinfra-prod-github-app[bot] merged 1 commit into
openstack-k8s-operators:mainfrom
eduolivares:ovn-native-bgp
Jul 6, 2026
Merged

Enable OVN-native BGP in bgp_dt01#720
centosinfra-prod-github-app[bot] merged 1 commit into
openstack-k8s-operators:mainfrom
eduolivares:ovn-native-bgp

Conversation

@eduolivares

@eduolivares eduolivares commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Replace ovn-bgp-agent with neutron-ovn (OVN agent) for BGP support:

  • Add ovn-bgp neutron service plugin to control plane configuration
  • Disable octavia, which cannot be used with OVN-native BGP due to
    OSPRH-30907
  • Disabled designate due to OSPRH-26878
  • Replace neutron-metadata and ovn-bgp-agent EDPM services with neutron-ovn
  • Remove edpm_ovn_bgp_agent_* ansible variables (no longer needed)
  • Configure edpm_neutron_ovn_agent_agent_extensions and
    edpm_neutron_ovn_agent_bgp_peer_bridges
  • Modify edpm_network_config_template: br-bgp-0 and br-bgp-1 OVS bridges
    on top of nic3 and nic4 for each EDPM node
  • Update README.md services table

OSPRH-25973

Assisted-By: Claude Opus 4.6

@ralonsoh

Copy link
Copy Markdown

/lgtm

@openshift-ci openshift-ci Bot added the lgtm label Mar 23, 2026
@openshift-ci openshift-ci Bot removed the lgtm label Mar 24, 2026
@eduolivares eduolivares force-pushed the ovn-native-bgp branch 2 times, most recently from f894bde to 476965c Compare April 14, 2026 09:41
@eduolivares eduolivares force-pushed the ovn-native-bgp branch 2 times, most recently from 6af85d5 to 66c4046 Compare May 8, 2026 15:07
@eduolivares eduolivares force-pushed the ovn-native-bgp branch 3 times, most recently from caea840 to 274cbf4 Compare June 5, 2026 06:39
@eduolivares eduolivares marked this pull request as ready for review June 11, 2026 10:05
@openshift-ci openshift-ci Bot requested a review from karelyatin June 11, 2026 10:05
@eduolivares eduolivares marked this pull request as draft June 12, 2026 10:23
@eduolivares eduolivares marked this pull request as ready for review July 2, 2026 10:13
@openshift-ci openshift-ci Bot requested review from abays and cjeanner July 2, 2026 10:13
@fultonj

fultonj commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

I generated current vs proposed CRs and these files, created by kustomize, are changed:

  diff -u tmp/current/control-plane/controlplane.yaml tmp/proposed/control-plane/controlplane.yaml
  diff -u tmp/current/edpm-computes-r0/computes-r0.yaml tmp/proposed/edpm-computes-r0/computes-r0.yaml
  diff -u tmp/current/edpm-networkers-r0/networkers-r0.yaml tmp/proposed/edpm-networkers-r0/networkers-r0.yaml

The above also changes for r1 and r2 of the above (7 files not 3), but I'm not showing those diffs since they follow the same pattern.

one

diff -u tmp/current/control-plane/controlplane.yaml tmp/proposed/control-plane/controlplane.yaml
--- tmp/current/control-plane/controlplane.yaml	2026-07-05 12:30:37.738703195 -0400
+++ tmp/proposed/control-plane/controlplane.yaml	2026-07-05 12:29:51.694803668 -0400
@@ -117,7 +117,7 @@
       secret: osp-secret
     uniquePodNames: true
   designate:
-    enabled: true
+    enabled: false
     template:
       customServiceConfig: |
         [DEFAULT]
@@ -356,25 +356,26 @@
     template:
       customServiceConfig: |
         [DEFAULT]
+        service_plugins = qos,ovn-router,trunk,segments,port_forwarding,log,placement,ovn-bgp
         vlan_transparent = true
         debug = true
         dns_domain = example.org.
-        external_dns_driver = designate
+        # external_dns_driver = designate
         [ovs]
         igmp_snooping_enable = true
-        [designate]
-        url = https://designate-internal.openstack.svc:9001/v2
-        auth_type = password
-        auth_url = {{ .KeystoneInternalURL }}
-        username = {{ .ServiceUser }}
-        password = {{ .ServicePassword }}
-        project_name = service
-        project_domain_name = Default
-        user_domain_name = Default
-        allow_reverse_dns_lookup = True
-        ipv4_ptr_zone_prefix_size = 24
-        ipv6_ptr_zone_prefix_size = 116
-        ptr_zone_email = admin@example.org
+        # [designate]
+        # url = https://designate-internal.openstack.svc:9001/v2
+        # auth_type = password
+        # auth_url = {{ .KeystoneInternalURL }}
+        # username = {{ .ServiceUser }}
+        # password = {{ .ServicePassword }}
+        # project_name = service
+        # project_domain_name = Default
+        # user_domain_name = Default
+        # allow_reverse_dns_lookup = True
+        # ipv4_ptr_zone_prefix_size = 24
+        # ipv6_ptr_zone_prefix_size = 116
+        # ptr_zone_email = admin@example.org
       databaseInstance: openstack
       networkAttachments:
       - internalapi
@@ -443,7 +444,7 @@
         replicas: 3
       secret: osp-secret
   octavia:
-    enabled: true
+    enabled: false
     template:
       amphoraImageContainerImage: quay.io/gthiemonge/octavia-amphora-image
       apacheContainerImage: registry.redhat.io/ubi9/httpd-24:latest
@@ -548,7 +549,7 @@
             cpu: "1"
             memory: 4Gi
   redis:
-    enabled: true
+    enabled: false
     templates:
       designate-redis:
         replicas: 1

two

  diff -u tmp/current/edpm-computes-r0/computes-r0.yaml tmp/proposed/edpm-computes-r0/computes-r0.yaml
--- tmp/current/edpm-computes-r0/computes-r0.yaml	2026-07-05 12:30:38.042709135 -0400
+++ tmp/proposed/edpm-computes-r0/computes-r0.yaml	2026-07-05 12:29:52.019810017 -0400
@@ -50,11 +50,16 @@
       ansiblePort: 22
       ansibleUser: cloud-admin
       ansibleVars:
+        bgp_bridges:
+        - br-bgp-0
+        - br-bgp-1
         edpm_bootstrap_command: |
           dnf -y install conntrack-tools
         edpm_frr_bgp_ipv4_src_network: bgpmainnet
         edpm_frr_bgp_ipv6_src_network: bgpmainnetv6
         edpm_frr_bgp_neighbor_password: f00barZ
+        edpm_frr_ovn_vrf_advertise: ovnvrf42
+        edpm_frr_ovn_vrf_learn: ovnvrf10
         edpm_network_config_hide_sensitive_logs: false
         edpm_network_config_os_net_config_mappings:
           edpm-r0-compute-0:
@@ -87,22 +92,37 @@
             domain: {{ dns_search_domains }}
             addresses:
               - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
-          - type: interface
-            name: nic3
+          - type: ovs_bridge
+            name: {{ bgp_bridges[0] }}
             use_dhcp: false
+            use_dhcpv6: true  # needed to enable IPv6 on bridges
             addresses:
-            - ip_netmask: {{ bgpnet0_ip }}/30
-          - type: interface
-            name: nic4
+              - ip_netmask: {{ bgpnet0_ip }}/30
+            defroute: false
+            members:
+              - type: interface
+                name: nic3
+                # force the MAC address of the bridge to this interface
+                primary: true
+          - type: ovs_bridge
+            name: {{ bgp_bridges[1] }}
             use_dhcp: false
+            use_dhcpv6: true  # needed to enable IPv6 on bridges
             addresses:
-            - ip_netmask: {{ bgpnet1_ip }}/30
+              - ip_netmask: {{ bgpnet1_ip }}/30
+            defroute: false
+            members:
+              - type: interface
+                name: nic4
+                # force the MAC address of the bridge to this interface
+                primary: true
           - type: interface
             name: lo
             addresses:
             - ip_netmask: {{ bgpmainnet_ip }}/32
             - ip_netmask: {{ bgpmainnetv6_ip }}/128
-        edpm_ovn_bgp_agent_expose_tenant_networks: true
+        edpm_neutron_ovn_agent_agent_extensions: metadata,ovn-bgp
+        edpm_neutron_ovn_agent_bgp_peer_bridges: '{{ bgp_bridges | join('','') }}'
         edpm_ovn_bridge_mappings:
         - datacentre:br-ex
         - octavia:br-octavia
@@ -112,7 +132,6 @@
         edpm_sshd_configure_firewall: true
         gather_facts: false
         neutron_physical_bridge_name: br-ex
-        neutron_public_interface_name: eth1
         timesync_ntp_servers:
         - hostname: pool.ntp.org
     ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret
@@ -153,9 +172,6 @@
           edpm_frr_bgp_peers:
           - 100.64.0.1
           - 100.65.0.1
-          edpm_ovn_bgp_agent_local_ovn_peer_ips:
-          - 100.64.0.1
-          - 100.65.0.1
       hostName: edpm-r0-compute-0
       networks:
       - defaultRoute: true
@@ -187,7 +203,6 @@
   - reboot-os
   - install-certs
   - ovn
-  - neutron-metadata
-  - ovn-bgp-agent
+  - neutron-ovn
   - libvirt
   - nova

three

  diff -u tmp/current/edpm-networkers-r0/networkers-r0.yaml tmp/proposed/edpm-networkers-r0/networkers-r0.yaml
--- tmp/current/edpm-networkers-r0/networkers-r0.yaml	2026-07-05 12:30:38.539718844 -0400
+++ tmp/proposed/edpm-networkers-r0/networkers-r0.yaml	2026-07-05 12:29:52.508819571 -0400
@@ -40,12 +40,17 @@
       ansiblePort: 22
       ansibleUser: cloud-admin
       ansibleVars:
+        bgp_bridges:
+        - br-bgp-0
+        - br-bgp-1
         edpm_bootstrap_command: |
           dnf -y install conntrack-tools
         edpm_enable_chassis_gw: true
         edpm_frr_bgp_ipv4_src_network: bgpmainnet
         edpm_frr_bgp_ipv6_src_network: bgpmainnetv6
         edpm_frr_bgp_neighbor_password: f00barZ
+        edpm_frr_ovn_vrf_advertise: ovnvrf42
+        edpm_frr_ovn_vrf_learn: ovnvrf10
         edpm_network_config_hide_sensitive_logs: false
         edpm_network_config_os_net_config_mappings:
           edpm-r0-networker-0:
@@ -78,22 +83,37 @@
             domain: {{ dns_search_domains }}
             addresses:
               - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
-          - type: interface
-            name: nic3
+          - type: ovs_bridge
+            name: {{ bgp_bridges[0] }}
             use_dhcp: false
+            use_dhcpv6: true  # needed to enable IPv6 on bridges
             addresses:
-            - ip_netmask: {{ bgpnet0_ip }}/30
-          - type: interface
-            name: nic4
+              - ip_netmask: {{ bgpnet0_ip }}/30
+            defroute: false
+            members:
+              - type: interface
+                name: nic3
+                # force the MAC address of the bridge to this interface
+                primary: true
+          - type: ovs_bridge
+            name: {{ bgp_bridges[1] }}
             use_dhcp: false
+            use_dhcpv6: true  # needed to enable IPv6 on bridges
             addresses:
-            - ip_netmask: {{ bgpnet1_ip }}/30
+              - ip_netmask: {{ bgpnet1_ip }}/30
+            defroute: false
+            members:
+              - type: interface
+                name: nic4
+                # force the MAC address of the bridge to this interface
+                primary: true
           - type: interface
             name: lo
             addresses:
             - ip_netmask: {{ bgpmainnet_ip }}/32
             - ip_netmask: {{ bgpmainnetv6_ip }}/128
-        edpm_ovn_bgp_agent_expose_tenant_networks: true
+        edpm_neutron_ovn_agent_agent_extensions: metadata,ovn-bgp
+        edpm_neutron_ovn_agent_bgp_peer_bridges: '{{ bgp_bridges | join('','') }}'
         edpm_ovn_bridge_mappings:
         - datacentre:br-ex
         - octavia:br-octavia
@@ -103,7 +123,6 @@
         edpm_sshd_configure_firewall: true
         gather_facts: false
         neutron_physical_bridge_name: br-ex
-        neutron_public_interface_name: eth1
         timesync_ntp_servers:
         - hostname: pool.ntp.org
     ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret
@@ -144,9 +163,6 @@
           edpm_frr_bgp_peers:
           - 100.64.0.5
           - 100.65.0.5
-          edpm_ovn_bgp_agent_local_ovn_peer_ips:
-          - 100.64.0.5
-          - 100.65.0.5
       hostName: edpm-r0-networker-0
       networks:
       - defaultRoute: true
@@ -179,5 +195,4 @@
   - reboot-os
   - install-certs
   - ovn
-  - neutron-metadata
-  - ovn-bgp-agent
+  - neutron-ovn

@fultonj fultonj left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread examples/dt/bgp_dt01/README.md Outdated
Comment thread examples/dt/bgp_dt01/README.md Outdated
Comment thread examples/dt/bgp_dt01/edpm/computes/r0/values.yaml Outdated
@fultonj

fultonj commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

@fultonj

fultonj commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

/lgtm

Replace ovn-bgp-agent with neutron-ovn (OVN agent) for BGP support:
- Add ovn-bgp neutron service plugin to control plane configuration
- Disable octavia, which cannot be used with OVN-native BGP due to
  OSPRH-30907
- Disabled designate due to OSPRH-26878
- Replace neutron-metadata and ovn-bgp-agent EDPM services with neutron-ovn
- Remove edpm_ovn_bgp_agent_* ansible variables (no longer needed)
- Configure edpm_neutron_ovn_agent_agent_extensions and
  edpm_neutron_ovn_agent_bgp_peer_bridges
- Modify edpm_network_config_template: br-bgp-0 and br-bgp-1 OVS bridges
  on top of nic3 and nic4 for each EDPM node
- Update README.md services table

OSPRH-25973

Assisted-By: Claude Opus 4.6
Signed-off-by: Eduardo Olivares <eolivare@redhat.com>
@openshift-ci openshift-ci Bot removed the lgtm label Jul 6, 2026

@fultonj fultonj left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/approve
/lgtm

@openshift-ci openshift-ci Bot added the lgtm label Jul 6, 2026
@openshift-ci

openshift-ci Bot commented Jul 6, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ccamposr, eduolivares, fultonj

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved label Jul 6, 2026
@centosinfra-prod-github-app

Copy link
Copy Markdown
Contributor

@centosinfra-prod-github-app centosinfra-prod-github-app Bot merged commit c4d80f7 into openstack-k8s-operators:main Jul 6, 2026
7 checks passed
@eduolivares eduolivares deleted the ovn-native-bgp branch July 6, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants