:_mod-docs-content-type: PROCEDURE [id="adopting-networker-services-to-the-data-plane_{context}"] = Adopting Networker services to the {rhos_acro} data plane [role="_abstract"] Adopt the Networker services in your existing {rhos_prev_long} deployment to the {rhos_long} data plane. The `Networker` services could be running on `Conroller` nodes or dedicated `Networker` nodes. You decide which services you want to run on the Networker nodes, and create a separate `OpenStackDataPlaneNodeSet` custom resource (CR) for the Networker nodes. You might also decide to implement the following options if they apply to your environment: * Depending on your topology, you might need to run the `neutron-metadata` service on the nodes, specifically when you want to serve metadata to SR-IOV ports that are hosted on Compute nodes. * If you want to continue running OVN gateway services on Networker nodes, keep `ovn` service in the list to deploy. * Optional: You can run the `neutron-dhcp` service on your Networker nodes instead of your Compute nodes. You might not need to use `neutron-dhcp` with OVN, unless your deployment uses DHCP relays, or advanced DHCP options that are supported by dnsmasq but not by the OVN DHCP implementation. Adopt each Controller or Networker node in your existing {rhos_prev_long} deployment to the {rhos_long} when your node is set as an OVN chassis gateway. Any node with parameter set to `enable-chassis-as-gw` is considered OVN gateway chassis. In this case, such nodes will become edpm networker nodes after adoption. . Check for the nodes where `OVN Controller Gateway agent` agents are running. The list of agents varies depending on the services you enabled: + ---- $ oc exec openstackclient -- openstack network agent list +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ | e5075ee0-9dd9-4f0a-a42a-6bbdf1a6111c | OVN Controller Gateway agent | controller-0.localdomain | | XXX | UP | ovn-controller | | f3112349-054c-403a-b00a-e219238192b8 | OVN Controller agent | compute-0.localdomain | | XXX | UP | ovn-controller | | af9dae2d-1c1c-55a8-a743-f84719f6406d | OVN Metadata agent | compute-0.localdomain | | XXX | UP | neutron-ovn-metadata-agent | | 51a11df8-a66e-47a2-aec0-52eb8589626c | OVN Controller Gateway agent | controller-1.localdomain | | XXX | UP | ovn-controller | | bb817e5e-7832-410a-9e67-934dac8c602f | OVN Controller Gateway agent | controller-2.localdomain | | XXX | UP | ovn-controller | +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ ---- .Prerequisites * Define the shell variable. Based on above agent list output, controller-0, controller-1, controller-2 are our target hosts. If you have both `Controller` and `Networker` nodes running networker services then add all those hosts below. + [subs=+quotes] ---- declare -A networkers networkers+=( ["controller-0.localdomain"]="192.168.122.100" ["controller-1.localdomain"]="192.168.122.101" ["controller-2.localdomain"]="192.168.122.102" # ... ) ---- + ** Replace `[""]="192.168.122.100"` with the name and IP address of the corresponding Networker or Controller node as per your environment. .Procedure . Deploy the `OpenStackDataPlaneNodeSet` CR for your nodes: + [NOTE] You can reuse most of the `nodeTemplate` section from the `OpenStackDataPlaneNodeSet` CR that is designated for your Compute nodes. You can omit some of the variables because of the limited set of services that are running on the Networker nodes. + [subs="+quotes"] ---- $ oc apply -f - < edpm_ovn_bridge: br-int edpm_ovn_encap_type: geneve ovn_monitor_all: true edpm_ovn_remote_probe_interval: 60000 edpm_ovn_ofctrl_wait_before_clear: 8000 # serve as a OVN gateway edpm_enable_chassis_gw: true timesync_ntp_servers: ifeval::["{build}" != "downstream"] - hostname: pool.ntp.org endif::[] ifeval::["{build}" == "downstream"] - hostname: clock.redhat.com - hostname: clock2.redhat.com endif::[] ifeval::["{build}" != "downstream"] edpm_bootstrap_command: | # This is a hack to deploy RDO Delorean repos to RHEL as if it were Centos 9 Stream set -euxo pipefail curl -sL https://github.com/openstack-k8s-operators/repo-setup/archive/refs/heads/main.tar.gz | tar -xz python3 -m venv ./venv PBR_VERSION=0.0.0 ./venv/bin/pip install ./repo-setup-main # This is required for FIPS enabled until trunk.rdoproject.org # is not being served from a centos7 host, tracked by # https://issues.redhat.com/browse/RHOSZUUL-1517 dnf -y install crypto-policies update-crypto-policies --set FIPS:NO-ENFORCE-EMS ./venv/bin/repo-setup current-podified -b antelope -d centos9 --stream rm -rf repo-setup-main endif::[] gather_facts: false enable_debug: false # edpm firewall, change the allowed CIDR if needed edpm_sshd_configure_firewall: true edpm_sshd_allowed_ranges: ['192.168.122.0/24'] # SELinux module edpm_selinux_mode: enforcing # Do not attempt OVS major upgrades here edpm_ovs_packages: - openvswitch3.3 EOF ---- + * `spec.tlsEnabled` specifies whether TLS Everywhere is enabled. If TLS is enabled, change `spec:tlsEnabled` to `true`. * `edpm_ovn_bridge_mappings: ` specifies the bridge mapping values that you used in your {rhos_prev_long} {rhos_prev_ver} deployment. * `edpm_enable_chassis_gw` specifies whether to run `ovn-controller` in gateway mode. ifeval::["{build}" != "downstream"] + [IMPORTANT] ==== For environments that are enabled with border gateway protocol (BGP), preserve the default routes on the data plane nodes. When adopting {rhos_prev_long} {rhos_prev_ver} environments with BGP, default routes can be lost when the data plane adoption procedure stops the {rhos_prev_long} services, specifically when FRRouting (FRR) is stopped. This causes connectivity issues during the {rhos_acro} data plane deployment. To prevent this, configure the required routes by using `os-net-config` on the data plane nodes (Compute nodes and Networker nodes) affected by this issue. Modify your `os-net-config` configuration file by adding the required routes, and then apply it: ---- $ sudo os-net-config -c /etc/os-net-config/modified_config_with_routes.yaml --provider ifcfg ---- This temporary default route is needed during the installation of the first services (such as `download-cache`) and is removed when the `configure-network` service applies the new network configuration. ==== + [NOTE] ==== For environments that are enabled with border gateway protocol (BGP), you must add the following services to the `services` list in the order shown: * After `configure-network` and before `validate-network`: Add `frr` service for FRRouting BGP support * After `ovn` and `neutron-metadata` services: Add `ovn-bgp-agent` service You must also configure the following additional Ansible variables in the `nodeTemplate.ansible.ansibleVars` section: * `edpm_frr_image`: The FRRouting container image * `edpm_ovn_bgp_agent_image`: The OVN BGP agent container image * `edpm_frr_bgp_ipv4_src_network`: The network name for BGP IPv4 source (for example, `bgpmainnet`) * `edpm_frr_bgp_ipv6_src_network`: The network name for BGP IPv6 source (for example, `bgpmainnetv6`) * `edpm_frr_bgp_neighbor_password`: The BGP neighbor password * `edpm_ovn_encap_ip`: Set to the BGP main network IP (for example, `{{ lookup("vars", "bgpmainnet_ip") }}`) ==== endif::[] . Ensure that you use the same `ovn-controller` settings in the `OpenStackDataPlaneNodeSet` CR that you used in the Networker nodes before adoption. This configuration is stored in the `external_ids` column in the `Open_vSwitch` table in the Open vSwitch database: + ---- ovs-vsctl list Open . ... external_ids : {hostname=controller-0.localdomain, ovn-bridge=br-int, ovn-bridge-mappings=, ovn-chassis-mac-mappings="datacentre:1e:0a:bb:e6:7c:ad", ovn-cms-options=enable-chassis-as-gw, ovn-encap-ip="172.19.0.100", ovn-encap-tos="0", ovn-encap-type=geneve, ovn-match-northd-version=False, ovn-monitor-all=True, ovn-ofctrl-wait-before-clear="8000", ovn-openflow-probe-interval="60", ovn-remote="tcp:ovsdbserver-sb.openstack.svc:6642", ovn-remote-probe-interval="60000", rundir="/var/run/openvswitch", system-id="2eec68e6-aa21-4c95-a868-31aeafc11736"} ... ---- + * Replace `` with the value of the bridge mappings in your configuration, for example, `"datacentre:br-ctlplane"`. . Optional: Enable `neutron-metadata` in the `OpenStackDataPlaneNodeSet` CR: + ---- $ oc patch openstackdataplanenodeset --type='json' --patch='[ { "op": "add", "path": "/spec/services/-", "value": "neutron-metadata" }]' ---- + * Replace `` with the name of the CR that you deployed for your Networker nodes, for example, `openstack-networker`. . Optional: Enable `neutron-dhcp` in the `OpenStackDataPlaneNodeSet` CR: + ---- $ oc patch openstackdataplanenodeset --type='json' --patch='[ { "op": "add", "path": "/spec/services/-", "value": "neutron-dhcp" }]' ---- . Run the `pre-adoption-validation` service for Networker nodes: .. Create a `OpenStackDataPlaneDeployment` CR that runs only the validation: + ---- $ oc apply -f - < ---- * Replace `` with the ID of the agent to delete, for example, `856960f0-5530-46c7-a331-6eadcba362da`. .Verification . Confirm that all the Ansible EE pods reach a `Completed` status: + ---- $ watch oc get pod -l app=openstackansibleee ---- + ---- $ oc logs -l app=openstackansibleee -f --max-log-requests 20 ---- . Wait for the data plane node set to reach the `Ready` status: + ---- $ oc wait --for condition=Ready osdpns/ --timeout=30m ---- + * Replace `` with the name of the CR that you deployed for your Networker nodes, for example, `openstack-networker`. . Verify that the {networking_first_ref} agents are running. The list of agents varies depending on the services you enabled: + ---- $ oc exec openstackclient -- openstack network agent list +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ | e5075ee0-9dd9-4f0a-a42a-6bbdf1a6111c | OVN Controller Gateway agent | controller-0.localdomain | | :-) | UP | ovn-controller | | f3112349-054c-403a-b00a-e219238192b8 | OVN Controller agent | compute-0.localdomain | | :-) | UP | ovn-controller | | af9dae2d-1c1c-55a8-a743-f84719f6406d | OVN Metadata agent | compute-0.localdomain | | :-) | UP | neutron-ovn-metadata-agent | | 51a11df8-a66e-47a2-aec0-52eb8589626c | OVN Controller Gateway agent | controller-1.localdomain | | :-) | UP | ovn-controller | | bb817e5e-7832-410a-9e67-934dac8c602f | OVN Controller Gateway agent | controller-2.localdomain | | :-) | UP | ovn-controller | +--------------------------------------+------------------------------+--------------------------+-------------------+-------+-------+----------------------------+ ----