devstack/driver_certs/cinder_driver_cert.sh
Ryan McNair 0ebf2dfe62 cinder_driver_certs.sh always passes driver
In cinder_driver_certs.sh, the tests are run and output is
piped to "tee".  Currently, checking the exit code of this
command only checks that "tee" exited properly.  Using the
pipefail option for this script will ensure the entire
pipe succeeds before passing a driver.

Change-Id: I58311aa0e2c779467d39c4477c4ea39d14eda207
Closes-Bug: #1289129
2014-03-31 16:26:56 +00:00

107 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# **cinder_cert.sh**
# This script is a simple wrapper around the tempest volume api tests
# It requires that you have a working and functional devstack install
# and that you've enabled your device driver by making the necessary
# modifications to /etc/cinder/cinder.conf
# This script will refresh your openstack repo's and restart the cinder
# services to pick up your driver changes.
# please NOTE; this script assumes your devstack install is functional
# and includes tempest. A good first step is to make sure you can
# create volumes on your device before you even try and run this script.
# It also assumes default install location (/opt/stack/xxx)
# to aid in debug, you should also verify that you've added
# an output directory for screen logs:
#
# SCREEN_LOGDIR=/opt/stack/screen-logs
set -o pipefail
CERT_DIR=$(cd $(dirname "$0") && pwd)
TOP_DIR=$(cd $CERT_DIR/..; pwd)
source $TOP_DIR/functions
source $TOP_DIR/stackrc
source $TOP_DIR/openrc
source $TOP_DIR/lib/infra
source $TOP_DIR/lib/tempest
source $TOP_DIR/lib/cinder
TEMPFILE=`mktemp`
RECLONE=True
function log_message {
MESSAGE=$1
STEP_HEADER=$2
if [[ "$STEP_HEADER" = "True" ]]; then
echo -e "\n========================================================" | tee -a $TEMPFILE
fi
echo -e `date +%m/%d/%y/%T:`"${MESSAGE}" | tee -a $TEMPFILE
if [[ "$STEP_HEADER" = "True" ]]; then
echo -e "========================================================" | tee -a $TEMPFILE
fi
}
if [[ "$OFFLINE" = "True" ]]; then
echo "ERROR: Driver cert requires fresh clone/pull from ${CINDER_BRANCH}"
echo " Please set OFFLINE=False and retry."
exit 1
fi
log_message "RUNNING CINDER DRIVER CERTIFICATION CHECK", True
log_message "Output is being logged to: $TEMPFILE"
cd $CINDER_DIR
log_message "Cloning to ${CINDER_REPO}...", True
install_cinder
log_message "Pull a fresh Clone of cinder repo...", True
git status | tee -a $TEMPFILE
git log --pretty=oneline -n 1 | tee -a $TEMPFILE
log_message "Gathering copy of cinder.conf file (passwords will be scrubbed)...", True
cat /etc/cinder/cinder.conf | egrep -v "(^#.*|^$)" | tee -a $TEMPFILE
sed -i "s/\(.*password.*=\).*$/\1 xxx/i" $TEMPFILE
log_message "End of cinder.conf.", True
cd $TOP_DIR
# Verify tempest is installed/enabled
if ! is_service_enabled tempest; then
log_message "ERROR!!! Cert requires tempest in enabled_services!", True
log_message" Please add tempest to enabled_services and retry."
exit 1
fi
cd $TEMPEST_DIR
install_tempest
log_message "Verify tempest is current....", True
git status | tee -a $TEMPFILE
log_message "Check status and get latest commit..."
git log --pretty=oneline -n 1 | tee -a $TEMPFILE
#stop and restart cinder services
log_message "Restart Cinder services...", True
stop_cinder
sleep 1
start_cinder
sleep 5
# run tempest api/volume/test_*
log_message "Run the actual tempest volume tests (./tools/pretty_tox.sh api.volume)...", True
./tools/pretty_tox.sh api.volume 2>&1 | tee -a $TEMPFILE
if [[ $? = 0 ]]; then
log_message "CONGRATULATIONS!!! Device driver PASSED!", True
log_message "Submit output: ($TEMPFILE)"
exit 0
else
log_message "SORRY!!! Device driver FAILED!", True
log_message "Check output in $TEMPFILE"
exit 1
fi