diff --git a/test/includes/microcloud.sh b/test/includes/microcloud.sh index e71feb1e..2b82097a 100644 --- a/test/includes/microcloud.sh +++ b/test/includes/microcloud.sh @@ -5,8 +5,8 @@ unset_interactive_vars() { unset SKIP_LOOKUP 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 \ - REPLACE_PROFILE + 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 REPLACE_PROFILE } # microcloud_interactive: outputs text that can be passed to `TEST_CONSOLE=1 microcloud init` @@ -40,6 +40,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. REPLACE_PROFILE="${REPLACE_PROFILE:-}" # Replace default profile config and devices. @@ -128,6 +130,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 if [ -n "${REPLACE_PROFILE}" ] ; then @@ -286,13 +299,29 @@ 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 [ $# -gt 0 ] && 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 the given disk set up for ZFS storage. validate_system_lxd_zfs() { name=${1} diff --git a/test/suites/add.sh b/test/suites/add.sh index de7f2055..40abd590 100644 --- a/test/suites/add.sh +++ b/test/suites/add.sh @@ -137,6 +137,7 @@ test_add_interactive() { export IPV4_END="10.1.123.254" export IPV6_SUBNET="fd42:1:1234:1234::1/64" export DNS_ADDRESSES="10.1.123.1,fd42:1:1234:1234::1" + 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 @@ -159,6 +160,7 @@ test_add_interactive() { export CEPH_ENCRYPT="no" export SETUP_OVN="yes" export OVN_FILTER="enp6s0" + export OVN_UNDERLAY_NETWORK="no" microcloud_interactive | lxc exec micro01 -- sh -c "microcloud add > out" lxc exec micro01 -- tail -1 out | grep "MicroCloud is ready" -q diff --git a/test/suites/basic.sh b/test/suites/basic.sh index 436c0b40..f967efee 100644 --- a/test/suites/basic.sh +++ b/test/suites/basic.sh @@ -136,6 +136,7 @@ test_interactive() { export IPV6_SUBNET="fd42:1:1234:1234::1/64" export DNS_ADDRESSES="10.1.123.1,8.8.8.8" export CEPH_CLUSTER_NETWORK="${microcloud_internal_net_addr}" + 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 @@ -206,6 +207,7 @@ 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 @@ -214,6 +216,37 @@ test_interactive() { 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))" -- sh -c "ip addr add ${ovn_underlay_ip} dev ${ovn_underlay_subnet_iface} && ip link set ${ovn_underlay_subnet_iface} up" + 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() { @@ -661,6 +694,7 @@ _test_case() { LOOKUP_IFACE="enp5s0" # filter string for the lookup interface table. LIMIT_SUBNET="yes" # (yes/no) input for limiting lookup of systems to the above subnet. CEPH_CLUSTER_NETWORK="${microcloud_internal_net_addr}" + OVN_UNDERLAY_NETWORK="no" EXPECT_PEERS="$((num_systems - 1))" @@ -1076,6 +1110,7 @@ test_reuse_cluster() { export IPV4_END="10.1.123.254" export DNS_ADDRESSES="10.1.123.1,8.8.8.8" export IPV6_SUBNET="fd42:1:1234:1234::1/64" + export OVN_UNDERLAY_NETWORK="no" reset_systems 3 3 3 echo "Create a MicroCloud that re-uses an existing service" @@ -1202,6 +1237,7 @@ test_remove_cluster_member() { export IPV4_END="10.1.123.254" export DNS_ADDRESSES="10.1.123.1,8.8.8.8" export IPV6_SUBNET="fd42:1:1234:1234::1/64" + export OVN_UNDERLAY_NETWORK="no" reset_systems 3 3 3 echo "Fail to remove member from MicroCeph and LXD until OSDs are removed"