From daf03bfb612f19b4fdc03eecc4fbb83375e4c081 Mon Sep 17 00:00:00 2001 From: Gabriel Mougard Date: Mon, 8 Jul 2024 15:19:08 +0200 Subject: [PATCH] tests: Add OVN underlay tests Signed-off-by: Gabriel Mougard --- test/includes/microcloud.sh | 32 +++++++++++++++++++++++++++++++- test/suites/basic.sh | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/test/includes/microcloud.sh b/test/includes/microcloud.sh index 8fe2feac9..5dfda96b9 100644 --- a/test/includes/microcloud.sh +++ b/test/includes/microcloud.sh @@ -5,7 +5,7 @@ unset_interactive_vars() { unset LOOKUP_IFACE LIMIT_SUBNET SKIP_SERVICE EXPECT_PEERS REUSE_EXISTING REUSE_EXISTING_COUNT \ SETUP_ZFS ZFS_FILTER ZFS_WIPE \ SETUP_CEPH CEPH_WARNING CEPH_FILTER CEPH_WIPE CEPH_ENCRYPT SETUP_CEPHFS CEPH_CLUSTER_NETWORK IGNORE_CEPH_NETWORKING \ - PROCEED_WITH_NO_OVERLAY_NETWORKING SETUP_OVN OVN_WARNING OVN_FILTER IPV4_SUBNET IPV4_START IPV4_END DNS_ADDRESSES IPV6_SUBNET + PROCEED_WITH_NO_OVERLAY_NETWORKING SETUP_OVN OVN_UNDERLAY_NETWORK OVN_UNDERLAY_FILTER OVN_WARNING OVN_FILTER IPV4_SUBNET IPV4_START IPV4_END DNS_ADDRESSES IPV6_SUBNET } # microcloud_interactive: outputs text that can be passed to `TEST_CONSOLE=1 microcloud init` @@ -38,6 +38,8 @@ microcloud_interactive() { IPV4_START=${IPV4_START:-} # OVN ipv4 range start. IPV4_END=${IPV4_END:-} # OVN ipv4 range end. DNS_ADDRESSES=${DNS_ADDRESSES:-} # OVN custom DNS addresses. + OVN_UNDERLAY_NETWORK=${OVN_UNDERLAY_NETWORK:-} # (yes/no) set up a custom OVN underlay network. + OVN_UNDERLAY_FILTER=${OVN_UNDERLAY_FILTER:-} # filter string for OVN underlay interfaces. IPV6_SUBNET=${IPV6_SUBNET:-} # OVN ipv6 range. setup=" @@ -122,6 +124,17 @@ ${IPV6_SUBNET} ${DNS_ADDRESSES} $(true) # workaround for set -e " + + if [ -n "${OVN_UNDERLAY_NETWORK}" ]; then + setup="${setup} +${OVN_UNDERLAY_NETWORK} +$([ "${OVN_UNDERLAY_NETWORK}" = "yes" ] && printf "wait 300ms") +${OVN_UNDERLAY_FILTER} +$([ "${OVN_UNDERLAY_NETWORK}" = "yes" ] && printf "select-all") +$([ "${OVN_UNDERLAY_NETWORK}" = "yes" ] && printf -- "---") +$(true) # workaround for set -e +" + fi fi # clear comments and empty lines. @@ -267,11 +280,28 @@ validate_ceph_encrypt() { # validate_system_microovn: Ensures the node with the given name has correctly set up MicroOVN with the given resources. validate_system_microovn() { name=${1} + shift 1 echo "==> ${name} Validating MicroOVN" lxc remote switch local lxc exec "${name}" -- microovn cluster list | grep -q "${name}" + + ovn_underlay_subnet_prefix="" + if echo "${1}" | grep -Pq '^([0-9]{1,3}\.){2}[0-9]{1,3}$'; then + ovn_underlay_subnet_prefix="${1}" + shift 1 + fi + + # Instances are named micro01, micro02, etc. + # We need to extract the instance number to check the OVN Geneve tunnel IP. + instance_idx=$(echo "${name}" | grep -oE '[0-9]+$') + underlay_ip_idx=$((instance_idx + 1)) + if [ -n "${ovn_underlay_subnet_prefix}" ]; then + lxc exec "${name}" -- sh -ceu " + microovn.ovn-sbctl --columns=ip,type find Encap type=geneve | grep -q ${ovn_underlay_subnet_prefix}.${underlay_ip_idx} + " > /dev/null + fi } # validate_system_lxd_zfs: Ensures the node with the given name has a disk set up for ZFS storage. diff --git a/test/suites/basic.sh b/test/suites/basic.sh index 8c2bbbdc8..7dcefcdc7 100644 --- a/test/suites/basic.sh +++ b/test/suites/basic.sh @@ -203,14 +203,45 @@ test_interactive() { export IPV4_SUBNET="10.1.123.1/24" export IPV4_START="10.1.123.100" export IPV4_END="10.1.123.254" + export OVN_UNDERLAY_NETWORK="no" microcloud_interactive | lxc exec micro01 -- sh -c "microcloud init > out" - lxc exec micro01 -- tail -1 out | grep "MicroCloud is ready" -q for m in micro01 micro02 micro03 ; do validate_system_lxd "${m}" 3 disk1 3 1 "${OVN_FILTER}" "${IPV4_SUBNET}" "${IPV4_START}"-"${IPV4_END}" "${IPV6_SUBNET}" validate_system_microceph "${m}" 1 "${CEPH_CLUSTER_NETWORK}" disk2 validate_system_microovn "${m}" done + + reset_systems 3 3 3 + + ceph_cluster_subnet_prefix="10.2.123" + ceph_cluster_subnet_iface="enp7s0" + + for n in $(seq 2 4); do + cluster_ip="${ceph_cluster_subnet_prefix}.${n}/24" + lxc exec "micro0$((n-1))" -- ip addr add "${cluster_ip}" dev "${ceph_cluster_subnet_iface}" + done + + ovn_underlay_subnet_prefix="10.3.123" + ovn_underlay_subnet_iface="enp8s0" + + for n in $(seq 2 4); do + ovn_underlay_ip="${ovn_underlay_subnet_prefix}.${n}/24" + lxc exec "micro0$((n-1))" -- ip addr add "${ovn_underlay_ip}" dev "${ovn_underlay_subnet_iface}" + done + + echo "Creating a MicroCloud with ZFS, Ceph storage with a fully disaggregated Ceph networking setup, OVN management network and OVN underlay network" + export CEPH_CLUSTER_NETWORK="${ceph_cluster_subnet_prefix}.0/24" + export OVN_UNDERLAY_NETWORK="yes" + export OVN_UNDERLAY_FILTER="${ovn_underlay_subnet_prefix}" + microcloud_interactive | lxc exec micro01 -- sh -c "microcloud init > out" + + lxc exec micro01 -- tail -1 out | grep "MicroCloud is ready" -q + for m in micro01 micro02 micro03 ; do + validate_system_lxd "${m}" 3 disk1 3 1 "${OVN_FILTER}" "${IPV4_SUBNET}" "${IPV4_START}"-"${IPV4_END}" "${IPV6_SUBNET}" + validate_system_microceph "${m}" 1 "${CEPH_CLUSTER_NETWORK}" disk2 + validate_system_microovn "${m}" "${ovn_underlay_subnet_prefix}" + done } test_instances_config() {