mongodb/test/run-openshift
Marek Skalický 6d3fdf2066 Initial import.
2017-04-24 14:57:03 +02:00

88 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
#
# Test the MongoDB image in OpenShift.
#
# IMAGE_NAME specifies a name of the candidate image used for testing.
# The image has to be available before this script is executed.
#
set -exo nounset
function prepare_oc_client() {
# Prepare oc command
if [[ ! -d ../openshift-client/ ]]; then
OC_RELEASE=$(curl -s https://api.github.com/repos/openshift/origin/releases | grep "browser_download_url" | grep "openshift-origin-client" | grep "linux-64bit" | sort | tail -n 1 | sed -e 's|"browser_download_url": ||' | tr -d ' "')
curl -L ${OC_RELEASE} | tar xz
mv ./openshift-origin-client-tools-* ../openshift-client
fi
export PATH=${PATH}:`pwd`/../openshift-client/
}
prepare_oc_client
function cleanup() {
echo "Stopping and removing OpenShift cluster..."
oc delete project --all
oc cluster down
}
trap cleanup EXIT SIGINT
function print_logs() {
oc get all
while read pod_info; do
pod=$(echo ${pod_info} | tr -s ' ' | cut -f1 -d' ')
echo "INFO: printing logs for pod ${pod}"
oc logs ${pod}
done < <(oc get pods --no-headers=true)
}
trap print_logs ERR
# Start OpenShift cluster
[ -d openshift.pv ] || mkdir openshift.pv
oc cluster up --host-pv-dir=$(pwd)/openshift.pv
# Prepare image - add tag different than :latest
# With :latest default imagePullPolicy is Always
# https://docs.openshift.com/enterprise/3.2/dev_guide/managing_images.html#image-pull-policy
docker tag ${IMAGE_NAME} ${IMAGE_NAME}:test-openshift
IMAGE_NAME=${IMAGE_NAME}:test-openshift
#
# General functions
#
# wait_for_ready_pods wait till number of pods with label get ready
function wait_for_ready_pods() {
local label="$1"
local count="$2"
for i in $(seq 30); do
if [[ "$(oc get pods --no-headers=true -l${label} | grep "1/1" | wc -l)" -eq ${count} ]]; then
return 0
fi
echo "Waiting for ${count} ready pods labeled with '${label}'..."
sleep 20
done
return 1
}
# Deploy MongoDB clustered application
USER=user
PASS=pass
ADMIN_PASS=adminPass
DB=db
oc new-project petset-example
oc new-app --file=../examples/petset/mongodb-petset-persistent.yaml -p MONGODB_USER=${USER} -p MONGODB_PASSWORD=${PASS} -p MONGODB_DATABASE=${DB} -p MONGODB_ADMIN_PASSWORD=${ADMIN_PASS} -p MONGODB_IMAGE=${IMAGE_NAME} -p VOLUME_CAPACITY=500M
wait_for_ready_pods "app=mongodb-petset-replication" 3
wait_for_ready_pods "openshift.io/deployer-pod-for.name" 0
host="rs0/$(oc get endpoints mongodb --no-headers | tr -s ' ' | cut -f2 -d' ')"
docker exec origin kubectl run --attach --restart=Never mongodb-test --image ${IMAGE_NAME} --env="MONGODB_ADMIN_PASSWORD=${ADMIN_PASS}" --command -- bash -c "set -x
. /usr/share/container-scripts/mongodb/common.sh
. /usr/share/container-scripts/mongodb/test-functions.sh
wait_for_mongo_up '${host}'
wait_replicaset_members '${host}' 3
insert_and_wait_for_replication '${host}' '{a:5, b:10}'"