add integration test script
Signed-off-by: Steven Borrelli <steve@borrelli.org>
This commit is contained in:
parent
265ad7c569
commit
43e6eea5a9
|
@ -0,0 +1,189 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
# setting up colors
|
||||
BLU='\033[0;34m'
|
||||
YLW='\033[0;33m'
|
||||
GRN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
NOC='\033[0m' # No Color
|
||||
echo_info(){
|
||||
printf "\n${BLU}%s${NOC}" "$1"
|
||||
}
|
||||
echo_step(){
|
||||
printf "\n${BLU}>>>>>>> %s${NOC}\n" "$1"
|
||||
}
|
||||
echo_sub_step(){
|
||||
printf "\n${BLU}>>> %s${NOC}\n" "$1"
|
||||
}
|
||||
|
||||
echo_step_completed(){
|
||||
printf "${GRN} [✔]${NOC}"
|
||||
}
|
||||
|
||||
echo_success(){
|
||||
printf "\n${GRN}%s${NOC}\n" "$1"
|
||||
}
|
||||
echo_warn(){
|
||||
printf "\n${YLW}%s${NOC}" "$1"
|
||||
}
|
||||
echo_error(){
|
||||
printf "\n${RED}%s${NOC}" "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ------------------------------
|
||||
projectdir="$( cd "$( dirname "${BASH_SOURCE[0]}")"/../.. && pwd )"
|
||||
|
||||
# get the build environment variables from the special build.vars target in the main makefile
|
||||
eval $(make --no-print-directory -C ${projectdir} build.vars)
|
||||
|
||||
# ------------------------------
|
||||
|
||||
SAFEHOSTARCH="${SAFEHOSTARCH:-amd64}"
|
||||
BUILD_IMAGE="${BUILD_REGISTRY}/${PROJECT_NAME}-${SAFEHOSTARCH}"
|
||||
PACKAGE_IMAGE="crossplane.io/inttests/${PROJECT_NAME}:${VERSION}"
|
||||
CONTROLLER_IMAGE="${BUILD_REGISTRY}/${PROJECT_NAME}-controller-${SAFEHOSTARCH}"
|
||||
|
||||
version_tag="$(cat ${projectdir}/_output/version)"
|
||||
# tag as latest version to load into kind cluster
|
||||
PACKAGE_CONTROLLER_IMAGE="${DOCKER_REGISTRY}/${PROJECT_NAME}-controller:${VERSION}"
|
||||
K8S_CLUSTER="${K8S_CLUSTER:-${BUILD_REGISTRY}-inttests}"
|
||||
|
||||
CROSSPLANE_NAMESPACE="crossplane-system"
|
||||
PACKAGE_NAME="provider-aws"
|
||||
|
||||
# cleanup on exit
|
||||
if [ "$skipcleanup" != true ]; then
|
||||
function cleanup {
|
||||
echo_step "Cleaning up..."
|
||||
export KUBECONFIG=
|
||||
"${KIND}" delete cluster --name="${K8S_CLUSTER}"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
fi
|
||||
|
||||
# setup package cache
|
||||
echo_step "setting up local package cache"
|
||||
CACHE_PATH="${projectdir}/.work/inttest-package-cache"
|
||||
mkdir -p "${CACHE_PATH}"
|
||||
echo "created cache dir at ${CACHE_PATH}"
|
||||
docker tag "${BUILD_IMAGE}" "${PACKAGE_IMAGE}"
|
||||
"${UP}" xpkg xp-extract --from-daemon "${PACKAGE_IMAGE}" -o "${CACHE_PATH}/${PACKAGE_NAME}.gz" && chmod 644 "${CACHE_PATH}/${PACKAGE_NAME}.gz"
|
||||
|
||||
# create kind cluster with extra mounts
|
||||
KIND_NODE_IMAGE="kindest/node:${KIND_NODE_IMAGE_TAG}"
|
||||
echo_step "creating k8s cluster using kind ${KIND_VERSION} and node image ${KIND_NODE_IMAGE}"
|
||||
KIND_CONFIG="$( cat <<EOF
|
||||
kind: Cluster
|
||||
apiVersion: kind.x-k8s.io/v1alpha4
|
||||
nodes:
|
||||
- role: control-plane
|
||||
extraMounts:
|
||||
- hostPath: "${CACHE_PATH}/"
|
||||
containerPath: /cache
|
||||
EOF
|
||||
)"
|
||||
echo "${KIND_CONFIG}" | "${KIND}" create cluster --name="${K8S_CLUSTER}" --wait=5m --image="${KIND_NODE_IMAGE}" --config=-
|
||||
|
||||
# tag controller image and load it into kind cluster
|
||||
docker tag "${CONTROLLER_IMAGE}" "${PACKAGE_CONTROLLER_IMAGE}"
|
||||
"${KIND}" load docker-image "${PACKAGE_CONTROLLER_IMAGE}" --name="${K8S_CLUSTER}"
|
||||
|
||||
echo_step "create crossplane-system namespace"
|
||||
"${KUBECTL}" create ns crossplane-system
|
||||
|
||||
echo_step "create persistent volume and claim for mounting package-cache"
|
||||
PV_YAML="$( cat <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: package-cache
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: manual
|
||||
capacity:
|
||||
storage: 5Mi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
hostPath:
|
||||
path: "/cache"
|
||||
EOF
|
||||
)"
|
||||
echo "${PV_YAML}" | "${KUBECTL}" create -f -
|
||||
|
||||
PVC_YAML="$( cat <<EOF
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: package-cache
|
||||
namespace: crossplane-system
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
volumeName: package-cache
|
||||
storageClassName: manual
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Mi
|
||||
EOF
|
||||
)"
|
||||
echo "${PVC_YAML}" | "${KUBECTL}" create -f -
|
||||
|
||||
# install crossplane from stable channel
|
||||
echo_step "installing crossplane from stable channel"
|
||||
"${HELM3}" repo add crossplane-stable https://charts.crossplane.io/stable/
|
||||
chart_version="$("${HELM3}" search repo crossplane-stable/crossplane | awk 'FNR == 2 {print $2}')"
|
||||
echo_info "using crossplane version ${chart_version}"
|
||||
echo
|
||||
# we replace empty dir with our PVC so that the /cache dir in the kind node
|
||||
# container is exposed to the crossplane pod
|
||||
"${HELM3}" install crossplane --namespace crossplane-system crossplane-stable/crossplane --version ${chart_version} --wait --set packageCache.pvc=package-cache
|
||||
|
||||
# ----------- integration tests
|
||||
echo_step "--- INTEGRATION TESTS ---"
|
||||
|
||||
# install package
|
||||
echo_step "installing ${PROJECT_NAME} into \"${CROSSPLANE_NAMESPACE}\" namespace"
|
||||
|
||||
INSTALL_YAML="$( cat <<EOF
|
||||
apiVersion: pkg.crossplane.io/v1
|
||||
kind: Provider
|
||||
metadata:
|
||||
name: "${PACKAGE_NAME}"
|
||||
spec:
|
||||
package: "${PACKAGE_NAME}"
|
||||
packagePullPolicy: Never
|
||||
EOF
|
||||
)"
|
||||
|
||||
echo "${INSTALL_YAML}" | "${KUBECTL}" apply -f -
|
||||
|
||||
# printing the cache dir contents can be useful for troubleshooting failures
|
||||
echo_step "check kind node cache dir contents"
|
||||
docker exec "${K8S_CLUSTER}-control-plane" ls -la /cache
|
||||
|
||||
echo_step "waiting for provider to be installed"
|
||||
|
||||
kubectl wait "provider.pkg.crossplane.io/${PACKAGE_NAME}" --for=condition=healthy --timeout=180s
|
||||
|
||||
echo_step "uninstalling ${PROJECT_NAME}"
|
||||
|
||||
echo "${INSTALL_YAML}" | "${KUBECTL}" delete -f -
|
||||
|
||||
# check pods deleted
|
||||
timeout=60
|
||||
current=0
|
||||
step=3
|
||||
while [[ $(kubectl get providerrevision.pkg.crossplane.io -o name | wc -l) != "0" ]]; do
|
||||
echo "waiting for provider to be deleted for another $step seconds"
|
||||
current=$current+$step
|
||||
if ! [[ $timeout > $current ]]; then
|
||||
echo_error "timeout of ${timeout}s has been reached"
|
||||
fi
|
||||
sleep $step;
|
||||
done
|
||||
|
||||
echo_success "Integration tests succeeded!"
|
Loading…
Reference in New Issue