ci: almost done cleanup
diff --git a/roles/defaults/defaults/main.yml b/roles/defaults/defaults/main.yml
index ec0988d..841fdb3 100644
--- a/roles/defaults/defaults/main.yml
+++ b/roles/defaults/defaults/main.yml
@@ -18,5 +18,8 @@
 atmosphere_ingress_class_name: atmosphere
 atmosphere_ingress_cluster_issuer: atmosphere
 
+# Network backend
+atmosphere_network_backend: openvswitch
+
 # This is for override values in atmosphere_images
 atmosphere_image_overrides: {}
diff --git a/roles/keepalived/defaults/main.yml b/roles/keepalived/defaults/main.yml
index ac9309e..dd1e135 100644
--- a/roles/keepalived/defaults/main.yml
+++ b/roles/keepalived/defaults/main.yml
@@ -42,3 +42,15 @@
 keepalived_vrid: 51
 
                                                                    # ]]]
+
+keepalived_pod_dependency:
+  openvswitch:
+    - requireSameNode: true
+      labels:
+        application: neutron
+        component: neutron-ovs-agent
+  ovn:
+    - requireSameNode: true
+      labels:
+        application: ovn
+        component: ovn-controller
diff --git a/roles/keepalived/tasks/main.yml b/roles/keepalived/tasks/main.yml
index 50eb9d3..4eff179 100644
--- a/roles/keepalived/tasks/main.yml
+++ b/roles/keepalived/tasks/main.yml
@@ -131,7 +131,7 @@
                           apiVersion: v1
                           fieldPath: metadata.name
                     - name: DEPENDENCY_POD_JSON
-                      value: '[{"labels":{"application":"neutron","component":"neutron-ovs-agent"},"requireSameNode":true}]'
+                      value: "{{ keepalived_pod_dependency[atmosphere_network_backend] | to_json }}"
                 - name: wait-for-ip
                   image: "{{ atmosphere_images['keepalived'] | vexxhost.kubernetes.docker_image('ref') }}"
                   command:
diff --git a/roles/neutron/defaults/main.yml b/roles/neutron/defaults/main.yml
index b82e0b6..c7d21b3 100644
--- a/roles/neutron/defaults/main.yml
+++ b/roles/neutron/defaults/main.yml
@@ -19,9 +19,6 @@
 neutron_helm_release_namespace: openstack
 neutron_helm_values: {}
 
-# OVN support
-neutron_ovn_enabled: "{{ ovn_enabled | default(false) | bool }}"
-
 # List of networks to provision inside OpenStack
 neutron_networks: []
 
diff --git a/roles/neutron/tasks/main.yml b/roles/neutron/tasks/main.yml
index 5853b31..f37f6a5 100644
--- a/roles/neutron/tasks/main.yml
+++ b/roles/neutron/tasks/main.yml
@@ -40,30 +40,10 @@
   ansible.builtin.set_fact:
     _neutron_helm_values: "{{ __neutron_helm_values }}"
 
-- name: Add OVN configuration
-  when: neutron_ovn_enabled | bool
-  block:
-    - name: Retrieve OVN Northbound service IP
-      kubernetes.core.k8s_info:
-        api_version: v1
-        kind: Service
-        name: ovn-ovsdb-nb
-        namespace: "{{ neutron_helm_release_namespace }}"
-      register: neutron_ovn_nb_svc
-      failed_when: neutron_ovn_nb_svc.resources | length == 0
-
-    - name: Retrieve OVN Southbound service IP
-      kubernetes.core.k8s_info:
-        api_version: v1
-        kind: Service
-        name: ovn-ovsdb-sb
-        namespace: "{{ neutron_helm_release_namespace }}"
-      register: neutron_ovn_sb_svc
-      failed_when: neutron_ovn_sb_svc.resources | length == 0
-
-    - name: Append Helm values
-      ansible.builtin.set_fact:
-        _neutron_helm_values: "{{ _neutron_helm_values | combine(__neutron_ovn_helm_values, recursive=True) }}"
+- name: Append Helm values
+  when: atmosphere_network_backend == 'ovn'
+  ansible.builtin.set_fact:
+    _neutron_helm_values: "{{ _neutron_helm_values | combine(__neutron_ovn_helm_values, recursive=True) }}"
 
 - name: Deploy Helm chart
   run_once: true
diff --git a/roles/neutron/vars/main.yml b/roles/neutron/vars/main.yml
index 6352a03..acae3fc 100644
--- a/roles/neutron/vars/main.yml
+++ b/roles/neutron/vars/main.yml
@@ -16,6 +16,9 @@
   endpoints: "{{ openstack_helm_endpoints }}"
   images:
     tags: "{{ atmosphere_images | vexxhost.atmosphere.openstack_helm_image_tags('neutron') }}"
+  network:
+    backend:
+      - "{{ atmosphere_network_backend }}"
   pod:
     replicas:
       server: 3
@@ -67,9 +70,6 @@
     service_ingress_server: false
 
 __neutron_ovn_helm_values:
-  network:
-    backend:
-      - ovn
   conf:
     neutron:
       DEFAULT:
diff --git a/roles/ovn/tasks/main.yml b/roles/ovn/tasks/main.yml
index 307c50e..8c9eb37 100644
--- a/roles/ovn/tasks/main.yml
+++ b/roles/ovn/tasks/main.yml
@@ -14,6 +14,7 @@
 
 - name: Deploy Helm chart
   run_once: true
+  when: atmosphere_network_backend == 'ovn'
   kubernetes.core.helm:
     name: "{{ ovn_helm_release_name }}"
     chart_ref: "{{ ovn_helm_chart_ref }}"
diff --git a/roles/tempest/tasks/main.yml b/roles/tempest/tasks/main.yml
index 3a46f9e..254691a 100644
--- a/roles/tempest/tasks/main.yml
+++ b/roles/tempest/tasks/main.yml
@@ -85,7 +85,7 @@
     chart_ref: "{{ tempest_helm_chart_ref }}"
     release_namespace: "{{ tempest_helm_release_namespace }}"
     kubeconfig: /etc/kubernetes/admin.conf
-    values: "{{ _tempest_helm_values | combine(tempest_helm_values, recursive=True) }}"
+    values: "{{ _tempest_helm_values | combine(_tempest_network_backend_settings[atmosphere_network_backend], recursive=True) | combine(tempest_helm_values, recursive=True) }}"
     wait: true
     wait_timeout: 20m
 
diff --git a/roles/tempest/vars/main.yml b/roles/tempest/vars/main.yml
index c8ab79c..944f021 100644
--- a/roles/tempest/vars/main.yml
+++ b/roles/tempest/vars/main.yml
@@ -63,3 +63,48 @@
       # NOTE(mnaser): Heat uses the catalog and blindly adds a /v3 to the end of
       #               the endpoint.  This is a workaround to make it work.
       default: /v3
+
+_tempest_network_backend_settings:
+  openvswitch: {}
+  ovn:
+    conf:
+      tempest:
+        network-feature-enabled:
+          api_extensions:
+            - default-subnetpools
+            - network-ip-availability
+            - network_availability_zone
+            - auto-allocated-topology
+            - ext-gw-mode
+            - binding
+            - agent
+            - subnet_allocation
+            - tag
+            - external-net
+            - flavors
+            - net-mtu
+            - availability_zone
+            - quotas
+            - l3-ha
+            - provider
+            - multi-provider
+            - address-scope
+            - extraroute
+            - subnet-service-types
+            - standard-attr-timestamp
+            - service-type
+            - l3-flavors
+            - port-security
+            - extra_dhcp_opt
+            - standard-attr-revisions
+            - pagination
+            - sorting
+            - security-group
+            - dhcp_agent_scheduler
+            - router_availability_zone
+            - rbac-policies
+            - standard-attr-description
+            - router
+            - allowed-address-pairs
+            - project-id
+            - dvr