From e774ebb7f95be12dde7a2024303c2fc725b14ae7 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Tue, 28 Jul 2020 10:32:33 +0200 Subject: [PATCH] ci: detect available minikube executable In case there is a minikube executable in the $PATH already, use that for all commands. If there is none, install_minikube() will place a newly downloaded executable in /usr/local/bin which will be used by the full pathname, so that commands as root without /usr/local/bin in the $PATH will work. Signed-off-by: Niels de Vos --- scripts/minikube.sh | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/scripts/minikube.sh b/scripts/minikube.sh index 96c9c9c67..58b7c9562 100755 --- a/scripts/minikube.sh +++ b/scripts/minikube.sh @@ -5,7 +5,7 @@ function wait_for_ssh() { local tries=100 while ((tries > 0)); do - if minikube ssh echo connected &>/dev/null; then + if ${minikube} ssh echo connected &>/dev/null; then return 0 fi tries=$((tries - 1)) @@ -25,7 +25,7 @@ function copy_image_to_cluster() { docker tag "${build_image}" "${final_image}" return fi - docker save "${build_image}" | (eval "$(minikube docker-env --shell bash)" && docker load && docker tag "${build_image}" "${final_image}") + docker save "${build_image}" | (eval "$(${minikube} docker-env --shell bash)" && docker load && docker tag "${build_image}" "${final_image}") } # parse the minikube version, return the digit passed as argument @@ -36,11 +36,24 @@ minikube_version() { echo "${MINIKUBE_VERSION}" | sed 's/^v//' | cut -d'.' -f"${1}" } +# detect if there is a minikube executable available already. If there is none, +# fallback to using /usr/local/bin/minikube, as that is where +# install_minikube() will place it too. +function detect_minikube() { + if type minikube >/dev/null 2>&1; then + command -v minikube + return + fi + # default if minikube is not available + echo '/usr/local/bin/minikube' +} +minikube="$(detect_minikube)" + # install minikube function install_minikube() { - if type minikube >/dev/null 2>&1; then + if type "${minikube}" >/dev/null 2>&1; then local mk_version version - read -ra mk_version <<<"$(minikube version)" + read -ra mk_version <<<"$(${minikube} version)" version=${mk_version[2]} if [[ "${version}" != "${MINIKUBE_VERSION}" ]]; then echo "installed minikube version ${version} is not matching requested version ${MINIKUBE_VERSION}" @@ -71,8 +84,8 @@ function enable_psp() { # testing. In order to reduce resources and potential conflicts between storage # plugins, disable them. function disable_storage_addons() { - minikube addons disable default-storageclass 2>/dev/null || true - minikube addons disable storage-provisioner 2>/dev/null || true + ${minikube} addons disable default-storageclass 2>/dev/null || true + ${minikube} addons disable storage-provisioner 2>/dev/null || true } # configure minikube @@ -139,16 +152,16 @@ up) if minikube_supports_psp; then enable_psp # shellcheck disable=SC2086 - minikube start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" ${EXTRA_CONFIG} + ${minikube} start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" ${EXTRA_CONFIG} else # This is a workaround to fix psp issues in minikube >1.6.2 and <1.11.0 # shellcheck disable=SC2086 - minikube start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" + ${minikube} start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" kubectl apply -f "$DIR"/psp.yaml - minikube stop + ${minikube} stop # shellcheck disable=SC2086 - minikube start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" ${EXTRA_CONFIG} + ${minikube} start --force --memory="${MEMORY}" -b kubeadm --kubernetes-version="${KUBE_VERSION}" --vm-driver="${VM_DRIVER}" --feature-gates="${K8S_FEATURE_GATES}" ${EXTRA_CONFIG} fi # create a link so the default dataDirHostPath will work for this @@ -156,16 +169,16 @@ up) if [[ "${VM_DRIVER}" != "none" ]]; then wait_for_ssh # shellcheck disable=SC2086 - minikube ssh "sudo mkdir -p /mnt/${DISK}/var/lib/rook;sudo ln -s /mnt/${DISK}/var/lib/rook /var/lib/rook" + ${minikube} ssh "sudo mkdir -p /mnt/${DISK}/var/lib/rook;sudo ln -s /mnt/${DISK}/var/lib/rook /var/lib/rook" fi kubectl cluster-info ;; down) - minikube stop + ${minikube} stop ;; ssh) echo "connecting to minikube" - minikube ssh + ${minikube} ssh ;; deploy-rook) echo "deploy rook" @@ -188,8 +201,8 @@ teardown-rook) "$DIR"/rook.sh teardown # delete rook data for minikube - minikube ssh "sudo rm -rf /mnt/${DISK}/var/lib/rook; sudo rm -rf /var/lib/rook" - minikube ssh "sudo mkdir -p /mnt/${DISK}/var/lib/rook; sudo ln -s /mnt/${DISK}/var/lib/rook /var/lib/rook" + ${minikube} ssh "sudo rm -rf /mnt/${DISK}/var/lib/rook; sudo rm -rf /var/lib/rook" + ${minikube} ssh "sudo mkdir -p /mnt/${DISK}/var/lib/rook; sudo ln -s /mnt/${DISK}/var/lib/rook /var/lib/rook" ;; cephcsi) echo "copying the cephcsi image" @@ -204,7 +217,7 @@ k8s-sidecar) copy_image_to_cluster "${K8S_IMAGE_REPO}"/csi-resizer:v0.5.0 "${K8S_IMAGE_REPO}"/csi-resizer:v0.5.0 ;; clean) - minikube delete + ${minikube} delete ;; *) echo " $0 [command]