2022-01-25 14:56:25 +01:00
#!/usr/bin/env bash
2020-07-21 15:12:01 +03:00
set -eou pipefail
2020-10-29 19:19:31 +03:00
export USER_DISKS_MOUNTS = "/var/lib/extra,/var/lib/p1,/var/lib/p2"
2023-06-26 22:44:03 +05:30
# shellcheck source=/dev/null
2020-07-21 15:12:01 +03:00
source ./hack/test/e2e.sh
PROVISIONER = qemu
2023-06-26 22:44:03 +05:30
CLUSTER_NAME = " e2e- ${ PROVISIONER } "
QEMU_FLAGS = ( )
2020-07-21 15:12:01 +03:00
case " ${ CI :- false } " in
2023-06-26 22:44:03 +05:30
false )
QEMU_FLAGS += ( "--with-bootloader=false" )
2020-07-21 15:12:01 +03:00
; ;
*)
; ;
esac
case " ${ CUSTOM_CNI_URL :- false } " in
false )
; ;
*)
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( " --custom-cni-url= ${ CUSTOM_CNI_URL } " )
2020-07-21 15:12:01 +03:00
; ;
esac
2022-03-02 18:36:04 +03:00
case " ${ WITH_UEFI :- none } " in
none)
; ;
*)
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( " --with-uefi= ${ WITH_UEFI } " )
2020-08-27 23:23:20 +03:00
; ;
esac
2021-02-24 19:46:38 +03:00
case " ${ WITH_VIRTUAL_IP :- false } " in
true )
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( "--use-vip" )
2021-02-24 19:46:38 +03:00
; ;
esac
2021-10-14 15:40:54 +03:00
case " ${ WITH_CLUSTER_DISCOVERY :- true } " in
false )
2023-09-26 22:54:22 +04:00
QEMU_FLAGS += ( "--with-cluster-discovery=false" "--kubeprism-port=0" ) # disable both KubePrism and cluster discovery
2021-10-14 15:40:54 +03:00
; ;
esac
case " ${ WITH_KUBESPAN :- false } " in
true )
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( "--with-kubespan" )
2021-10-14 15:40:54 +03:00
; ;
esac
2022-06-08 01:26:43 +04:00
case " ${ WITH_CONTROL_PLANE_PORT :- false } " in
false )
; ;
*)
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( " --control-plane-port= ${ WITH_CONTROL_PLANE_PORT } " )
2022-06-08 01:26:43 +04:00
; ;
esac
2022-08-23 00:36:10 +04:00
case " ${ VIA_MAINTENANCE_MODE :- false } " in
false )
; ;
*)
# apply config via maintenance mode
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( "--skip-injecting-config" "--with-apply-config" )
2022-08-23 00:36:10 +04:00
; ;
esac
case " ${ DISABLE_DHCP_HOSTNAME :- false } " in
false )
; ;
*)
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( "--disable-dhcp-hostname" )
2022-08-23 00:36:10 +04:00
; ;
esac
2023-06-01 07:22:44 -04:00
case " ${ WITH_NETWORK_CHAOS :- false } " in
false )
; ;
*)
2023-06-26 22:44:03 +05:30
QEMU_FLAGS += ( "--with-network-chaos" "--with-network-packet-loss=0.01" "--with-network-latency=15ms" "--with-network-jitter=5ms" )
2023-06-01 07:22:44 -04:00
; ;
esac
2023-11-27 21:13:53 +04:00
case " ${ WITH_FIREWALL :- false } " in
false )
; ;
*)
QEMU_FLAGS += ( " --with-firewall= ${ WITH_FIREWALL } " )
; ;
esac
2020-12-21 21:01:37 +03:00
case " ${ USE_DISK_IMAGE :- false } " in
false )
; ;
*)
2024-05-01 14:57:14 +04:00
zstd -d < _out/metal-amd64.raw.zst > _out/metal-amd64.raw
2023-07-27 12:50:06 +04:00
QEMU_FLAGS += ( "--disk-image-path=_out/metal-amd64.raw" )
2020-12-21 21:01:37 +03:00
; ;
esac
2021-01-31 18:23:09 +03:00
case " ${ WITH_DISK_ENCRYPTION :- false } " in
false )
; ;
*)
2023-06-29 23:54:09 +03:00
QEMU_FLAGS += ( "--encrypt-ephemeral" "--encrypt-state" "--disk-encryption-key-types=kms" )
2021-01-31 18:23:09 +03:00
; ;
esac
2021-11-15 23:50:00 +03:00
case " ${ WITH_CONFIG_PATCH :- false } " in
false )
2023-06-26 22:44:03 +05:30
; ;
2021-11-15 23:50:00 +03:00
*)
2024-08-22 21:30:29 +05:30
[ [ ! ${ WITH_CONFIG_PATCH } = ~ ^@ ] ] && echo "WITH_CONFIG_PATCH variable should start with @" && exit 1
for i in ${ WITH_CONFIG_PATCH // : / } ; do
QEMU_FLAGS += ( " --config-patch= ${ i } " )
done
2023-06-26 22:44:03 +05:30
; ;
2021-11-15 23:50:00 +03:00
esac
2023-03-02 21:19:50 +05:30
case " ${ WITH_CONFIG_PATCH_WORKER :- false } " in
2023-02-17 23:10:28 +05:30
false )
2023-06-26 22:44:03 +05:30
; ;
2023-02-17 23:10:28 +05:30
*)
2024-08-22 21:30:29 +05:30
[ [ ! ${ WITH_CONFIG_PATCH_WORKER } = ~ ^@ ] ] && echo "WITH_CONFIG_PATCH_WORKER variable should start with @" && exit 1
for i in ${ WITH_CONFIG_PATCH_WORKER // : / } ; do
QEMU_FLAGS += ( " --config-patch-worker= ${ i } " )
done
2023-06-26 22:44:03 +05:30
; ;
2023-02-17 23:10:28 +05:30
esac
2024-08-20 18:22:34 +05:30
case " ${ WITH_SKIP_K8S_NODE_READINESS_CHECK :- false } " in
2023-06-26 22:44:03 +05:30
false )
; ;
2023-02-17 23:10:28 +05:30
*)
2024-08-20 18:22:34 +05:30
QEMU_FLAGS += ( "--skip-k8s-node-readiness-check" )
2023-06-26 22:44:03 +05:30
; ;
2023-02-17 23:10:28 +05:30
esac
2023-06-26 22:44:03 +05:30
case " ${ WITH_CUSTOM_CNI :- none } " in
false )
2023-06-09 10:14:58 -04:00
; ;
2023-06-26 22:44:03 +05:30
cilium)
2023-07-13 19:48:30 +03:00
QEMU_FLAGS += ( "--kubeprism-port=13336" )
2023-06-09 10:14:58 -04:00
; ;
esac
2023-06-26 22:44:03 +05:30
case " ${ WITH_TRUSTED_BOOT_ISO :- false } " in
2023-06-14 22:35:33 +04:00
false )
; ;
*)
2023-07-27 12:50:06 +04:00
INSTALLER_IMAGE = ${ INSTALLER_IMAGE } -amd64-secureboot
QEMU_FLAGS += ( "--iso-path=_out/metal-amd64-secureboot.iso" "--with-tpm2" "--encrypt-ephemeral" "--encrypt-state" "--disk-encryption-key-types=tpm" )
2023-06-14 22:35:33 +04:00
; ;
esac
2024-03-21 20:54:50 +03:00
case " ${ WITH_SIDEROLINK_AGENT :- false } " in
false )
; ;
*)
2024-04-01 14:27:31 +03:00
QEMU_FLAGS += ( " --with-siderolink= ${ WITH_SIDEROLINK_AGENT } " )
2024-03-21 20:54:50 +03:00
; ;
esac
2024-07-30 19:15:34 +05:30
case " ${ WITH_APPARMOR_LSM_ENABLED :- false } " in
false )
; ;
*)
cat <<EOF > " ${ TMP } /kernel-security.patch "
machine:
install:
extraKernelArgs:
- security = apparmor
EOF
QEMU_FLAGS += ( " --config-patch=@ ${ TMP } /kernel-security.patch " )
; ;
esac
2024-10-23 21:19:02 +04:00
case " ${ WITH_CONFIG_INJECTION_METHOD :- default } " in
default)
; ;
*)
QEMU_FLAGS += ( " --config-injection-method= ${ WITH_CONFIG_INJECTION_METHOD } " )
; ;
esac
2020-07-21 15:12:01 +03:00
function create_cluster {
2020-07-24 17:47:32 +03:00
build_registry_mirrors
2020-07-21 15:12:01 +03:00
" ${ TALOSCTL } " cluster create \
2021-08-09 15:19:14 +00:00
--provisioner= " ${ PROVISIONER } " \
--name= " ${ CLUSTER_NAME } " \
2023-06-26 22:44:03 +05:30
--kubernetes-version= " ${ KUBERNETES_VERSION } " \
2022-07-09 02:20:19 +05:30
--controlplanes= 3 \
2021-04-14 16:19:15 +03:00
--workers= " ${ QEMU_WORKERS :- 1 } " \
2022-01-21 19:07:13 +05:30
--disk= 15360 \
--extra-disks= " ${ QEMU_EXTRA_DISKS :- 0 } " \
--extra-disks-size= " ${ QEMU_EXTRA_DISKS_SIZE :- 5120 } " \
2024-09-03 17:23:19 +04:00
--extra-disks-drivers= " ${ QEMU_EXTRA_DISKS_DRIVERS :- } " \
2024-04-23 23:31:44 +05:30
--mtu= 1430 \
2021-08-09 15:19:14 +00:00
--memory= 2048 \
2022-01-21 19:07:13 +05:30
--memory-workers= " ${ QEMU_MEMORY_WORKERS :- 2048 } " \
2021-08-09 15:19:14 +00:00
--cpus= " ${ QEMU_CPUS :- 2 } " \
2022-01-21 19:07:13 +05:30
--cpus-workers= " ${ QEMU_CPUS_WORKERS :- 2 } " \
2021-08-09 15:19:14 +00:00
--cidr= 172.20.1.0/24 \
2024-08-08 16:12:45 +05:30
--user-disk= /var/lib/extra:350MB \
--user-disk= /var/lib/p1:350MB:/var/lib/p2:350MB \
2023-06-26 22:44:03 +05:30
--install-image= " ${ INSTALLER_IMAGE } " \
2020-07-21 15:12:01 +03:00
--with-init-node= false \
2023-06-26 22:44:03 +05:30
--cni-bundle-url= " ${ ARTIFACTS } /talosctl-cni-bundle-\${ARCH}.tar.gz " \
" ${ REGISTRY_MIRROR_FLAGS [@] } " \
" ${ QEMU_FLAGS [@] } "
2020-07-21 15:12:01 +03:00
2021-02-06 22:36:29 +03:00
" ${ TALOSCTL } " config node 172.20.1.2
2020-07-21 15:12:01 +03:00
}
function destroy_cluster( ) {
2020-07-31 00:41:42 +03:00
" ${ TALOSCTL } " cluster destroy --name " ${ CLUSTER_NAME } " --provisioner " ${ PROVISIONER } "
2020-07-21 15:12:01 +03:00
}
create_cluster
2021-04-14 16:19:15 +03:00
2023-06-26 22:44:03 +05:30
case " ${ WITH_CUSTOM_CNI :- none } " in
2023-03-02 21:19:50 +05:30
cilium)
install_and_run_cilium_cni_tests
; ;
*)
; ;
esac
2021-04-14 16:19:15 +03:00
case " ${ TEST_MODE :- default } " in
fast-conformance)
run_kubernetes_conformance_test fast
; ;
*)
get_kubeconfig
run_talos_integration_test
run_kubernetes_integration_test
2022-01-26 23:26:34 +03:00
if [ " ${ WITH_TEST :- none } " != "none" ] ; then
" ${ WITH_TEST } "
fi
2021-04-14 16:19:15 +03:00
; ;
esac
2020-07-31 00:41:42 +03:00
destroy_cluster