Last active
January 2, 2018 16:36
-
-
Save tomgco/f11a0d3cae7c900e68958856fb0ceca5 to your computer and use it in GitHub Desktop.
Run the CNCF kubernetes conformance tests.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
### | |
# | |
# This suite of tests runs the cncf kubernetes cluster conformance tests. | |
# These tests can take upto an hour (60mins) to run, so sit back, grab a | |
# cup of tea and enjoy seeing your build going green! (we hope). | |
# | |
### | |
# | |
# Prelude - make bash behave sanely | |
# http://redsymbol.net/articles/unofficial-bash-strict-mode/ | |
# | |
set -euo pipefail | |
IFS=$'\n\t' | |
# Beware of CDPATH gotchas causing cd not to work correctly when a user has | |
# set this in their environment | |
# https://bosker.wordpress.com/2012/02/12/bash-scripters-beware-of-the-cdpath/ | |
unset CDPATH | |
# resolved directory and self | |
declare -r DIR=$(cd "$(dirname "$0")" && pwd) | |
declare -r THIS_SCRIPT="${DIR}/$(basename "$0")" | |
cd "${DIR}" | |
INTERACTIVE= | |
CONTEXT= | |
PREVIOUS_CONTEXT=$(kubectl config current-context) | |
main() { | |
get_or_set_smoke_test_context | |
start_smoke_test | |
wait_for_pod_running | |
wait_for_smoke_test_exit | |
copy_files | |
print_results | |
delete_smoke_test | |
reset_context | |
} | |
usage() { | |
cat << EOF | |
usage: $0 [option] | |
Kubernetes conformance test | |
OPTIONS: | |
-h Show this message | |
-c [context] Switch to the specified kubectl context | |
EOF | |
} | |
if [[ -t 0 ]] && [[ -t 1 ]]; then | |
INTERACTIVE=1 | |
fi | |
while getopts "hc:?" OPTION | |
do | |
case $OPTION in | |
h) | |
usage | |
exit 0 | |
;; | |
c) | |
CONTEXT=$OPTARG | |
;; | |
?) | |
usage | |
exit 404 | |
;; | |
esac | |
done | |
RED="$(tput setaf 1)" | |
GREEN="$(tput setaf 2)" | |
YELLOW="$(tput setaf 3)" | |
BLUE="$(tput setaf 4)" | |
RESET="$(tput sgr0)" | |
get_or_set_smoke_test_context() { | |
local temp_context | |
if [ -z "$CONTEXT" ]; then | |
temp_context=$(kubectl config current-context) | |
else | |
kubectl config use-context "$CONTEXT" | |
temp_context=$CONTEXT | |
echo "kubectl current context has been changed to ${GREEN}${temp_context}${RESET}" | |
fi | |
cat <<EOF | |
The current cluster-info is $(kubectl cluster-info | head -n1) | |
Your current context is "${RED}$temp_context${RESET}". | |
EOF | |
read -n 1 -rp "Do you wish to continue? [y/n]: " current_env_input | |
echo -e "\n" | |
if [ "$current_env_input" = "y" ]; then | |
echo "${GREEN}[continuing]${RESET} with context: ${YELLOW}$temp_context${RESET}" | |
else | |
echo -e "${RED}[exiting]${RESET}" | |
exit 12 | |
fi | |
} | |
start_smoke_test() { | |
echo "${GREEN}[starting]${RESET} sonobuoy conformance tests${RESET}" | |
curl -sL https://raw.githubusercontent.com/cncf/k8s-conformance/master/sonobuoy-conformance.yaml | kubectl apply -f - | |
} | |
delete_smoke_test() { | |
echo "${RED}[deleting]${RESET} sonobuoy conformance tests${RESET}" | |
curl -sL https://raw.githubusercontent.com/cncf/k8s-conformance/master/sonobuoy-conformance.yaml | kubectl delete -f - | |
} | |
wait_for_pod_running() { | |
echo "${BLUE}[waiting]${RESET} for pod: ${YELLOW}sonobuoy${RESET}" | |
while : | |
do | |
if [ "$(kubectl -n sonobuoy get pod sonobuoy -o json | jq .status.phase -r)" = "Running" ]; then | |
break | |
fi | |
sleep 1 | |
done | |
echo "${GREEN}[done]${RESET}" | |
} | |
wait_for_smoke_test_exit() { | |
echo "${BLUE}[waiting]${RESET} for tests to exit" | |
while : | |
do | |
if kubectl logs -n sonobuoy sonobuoy | grep -q 'no-exit was specified, sonobuoy is now blocking' | |
then | |
break | |
fi | |
sleep 1 | |
done | |
echo "${GREEN}[done]${RESET}" | |
} | |
copy_files() { | |
mkdir -p results | |
kubectl cp sonobuoy/sonobuoy:/tmp/sonobuoy ./results | |
tar xfz results/*.tar.gz -C results | |
} | |
reset_context() { | |
kubectl config use-context "$PREVIOUS_CONTEXT" | |
} | |
print_results() { | |
tail -n 3 < plugings/e2e/results/e2e.log | |
} | |
cleanup() { | |
delete_smoke_test | |
reset_context | |
} | |
trap cleanup EXIT INT TERM | |
main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment