#!/usr/bin/env bash # # Apache License 2.0 (see LICENSE or http://www.apache.org/licenses/LICENSE-2.0) # # Copyright 2023 Red Hat, Inc. # # This script is based on: # - https://github.com/ovn-org/ovn-kubernetes/blob/master/contrib/kind.sh # - https://github.com/kiagnose/kiagnose/blob/main/automation/e2e.sh # - https://github.com/kiagnose/kiagnose/blob/main/checkups/kubevirt-vm-latency/automation/e2e.sh ARGCOUNT=$# # Returns the full directory name of the script DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" ARCH="" case $(uname -m) in x86_64) ARCH="amd64" ;; aarch64) ARCH="arm64" ;; esac set_default_params() { BIN_DIR=${BIN_DIR:-$DIR/../bin} KIND=${KIND:-$BIN_DIR/kind} KIND_VERSION=${KIND_VERSION:-v0.30.0} KUBECTL=${KUBECTL:-$BIN_DIR/kubectl} KUBECTL_VERSION=${KUBECTL_VERSION:-v1.34.1} KUBEVIRT_VERSION=${KUBEVIRT_VERSION:-v1.6.1} KUBEVIRT_CDI_VERSION=${KUBEVIRT_CDI_VERSION:-v1.63.0} KUBEVIRT_USE_EMULATION=${KUBEVIRT_USE_EMULATION:-"false"} CNAO_VERSION=${CNAO_VERSION:-v0.100.2} REGISTRY_NAME=${REGISTRY_NAME:-kind-registry} REGISTRY_PORT=${REGISTRY_PORT:-5001} REGISTRY_IMAGE=${REGISTRY_IMAGE:-registry:2} CLUSTER_NAME=${CLUSTER_NAME:-kind} SECONDARY_NETWORK_NAME=${SECONDARY_NETWORK_NAME:-kindexgw} SECONDARY_NETWORK_SUBNET=${SECONDARY_NETWORK_SUBNET:-172.19.0.0/16} SECONDARY_NETWORK_RANGE_START=${SECONDARY_NETWORK_RANGE_START:-172.19.1.1} SECONDARY_NETWORK_RANGE_END=${SECONDARY_NETWORK_RANGE_END:-172.19.255.254} SECONDARY_NETWORK_GATEWAY=${SECONDARY_NETWORK_GATEWAY:-172.19.0.1} NAMESPACE=${NAMESPACE:-default} } # Taken from: # https://github.com/kubevirt/kubevirtci/blob/f661bfe0e3678e5409c057855951c50a912571a0/cluster-up/cluster/ephemeral-provider-common.sh#L26C1-L45C1 detect_cri() { PODMAN_SOCKET=${PODMAN_SOCKET:-"/run/podman/podman.sock"} if [ "${CRI}" = "podman" ]; then _cri_socket=$(detect_podman_socket) _cri_bin="podman --remote --url=unix://$_cri_socket" elif [ "${CRI}" = "docker" ]; then _cri_bin=docker _cri_socket="/var/run/docker.sock" else _cri_socket=$(detect_podman_socket) if [ -n "$_cri_socket" ]; then _cri_bin="podman --remote --url=unix://$_cri_socket" echo >&2 "selecting podman as container runtime" elif docker ps >/dev/null 2>&1; then _cri_bin=docker _cri_socket="/var/run/docker.sock" echo >&2 "selecting docker as container runtime" else echo >&2 "no working container runtime found. Neither docker nor podman seems to work." exit 1 fi fi } # Taken from: # https://github.com/kubevirt/kubevirtci/blob/f661bfe0e3678e5409c057855951c50a912571a0/cluster-up/cluster/ephemeral-provider-common.sh#L20 detect_podman_socket() { if curl --unix-socket "${PODMAN_SOCKET}" http://d/v3.0.0/libpod/info >/dev/null 2>&1; then echo "${PODMAN_SOCKET}" fi } install_kind() { if [ ! -f "${KIND}" ]; then echo "Installing kind" mkdir -p "${BIN_DIR}" curl -Lo "${KIND}" "https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-${ARCH}" chmod +x "${KIND}" echo "Successfully installed kind at ${KIND}:" ${KIND} version fi } install_kubectl() { if [ ! -f "${KUBECTL}" ]; then echo "Installing kubectl" mkdir -p "${BIN_DIR}" curl -Lo "${KUBECTL}" "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl" chmod +x "${KUBECTL}" echo "Successfully installed kubectl at ${KUBECTL}:" ${KUBECTL} version --client fi } configure_inotify_limits() { echo "Configuring inotify limits" sudo sysctl fs.inotify.max_user_instances=512 sudo sysctl fs.inotify.max_user_watches=1048576 } # Taken from: # https://kind.sigs.k8s.io/docs/user/local-registry create_registry() { if [ "$(${_cri_bin} inspect -f '{{.State.Running}}' "${REGISTRY_NAME}" 2>/dev/null || true)" != 'true' ]; then echo "Creating registry" ${_cri_bin} run -d --restart=always -p "127.0.0.1:${REGISTRY_PORT}:5000" --network bridge --name "${REGISTRY_NAME}" "${REGISTRY_IMAGE}" fi } # Registry configuration taken from: # https://kind.sigs.k8s.io/docs/user/local-registry create_cluster() { if [ "${OPT_CREATE_REGISTRY}" == true ]; then echo "Creating kind cluster with containerd registry config dir enabled" cat <