#! /bin/bash set -o xtrace EC=0 MYSQL_PASSWORD="cinder" update_ec(){ local ec=$1 [ "$ec" -gt "$EC" ] && EC=$ec } function prepare_vm(){ if [[ $(cat /etc/*-release | head -n 1 | awk '{print $1}') =~ Ubuntu ]] then echo "mysql-server mysql-server/root_password select $MYSQL_PASSWORD" | debconf-set-selections echo "mysql-server mysql-server/root_password_again select $MYSQL_PASSWORD" | debconf-set-selections apt-get install -y mysql-server python-mysqldb rabbitmq-server curl screen nmap CONF_FILE='/usr/share/cinder-common/cinder.conf' else yum install -y mysql-server mysql-wsrep-client-5.6 MySQL-python nmap-ncat CONF_FILE='/usr/share/cinder/cinder-dist.conf' # workaround for `sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) # (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")` rm -f /etc/my.cnf local current_password=$(cat /root/.mysql_secret | head -1 | awk -F': ' '{print $2}') service mysql start mysqladmin -u root -p"$current_password" password "$MYSQL_PASSWORD" fi mysql -uroot -p"$MYSQL_PASSWORD" << MYSQL_SCRIPT CREATE DATABASE cinder; CREATE USER 'cinder'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'cinder'@'localhost'; MYSQL_SCRIPT cinder-manage --config-file $CONF_FILE db sync } function test_cinder_service(){ local service=$1 local port=$2 echo "Starting $1..." service "$service" start sleep 5 echo | ncat -w 5 127.0.0.1 "$port" local ec=$? update_ec "$ec" if [ "$ec" -eq 0 ] then echo "Cinder $1 successfully started" else echo "$service failed to start!" tail -n 40 /var/log/messages fi } function test_cinder_configs(){ local files=("/etc/cinder/cinder.conf" "/etc/cinder/api-paste.ini" "/etc/cinder/policy.json") for f in "${files[@]}" do [ -f "$f" ] ; update_ec "$?" done } case $1 in python-cinder) local imports=("cinder" "cinder.volume.drivers.lvm" "cinder.volume.drivers.rbd") for x in "${imports[@]}" do python -c "import $x" ; update_ec "$?" done ;; openstack-cinder) prepare_vm test_cinder_configs ls /usr/bin/cinder* ; update_ec "$?" test_cinder_service openstack-cinder-api 8776 ; update_ec "$?" [ -f "/usr/bin/cinder-volume" ] ; update_ec "$?" [ -f "/usr/bin/cinder-scheduler" ] ; update_ec "$?" ;; cinder-common) test_cinder_configs [ -f "/usr/bin/cinder-manage" ] ; update_ec "$?" ;; cinder-scheduler) [ -f "/usr/bin/cinder-scheduler" ] ; update_ec "$?" ;; cinder-api) prepare_vm [ -f "/usr/bin/cinder-api" ] ; update_ec "$?" test_cinder_service cinder-api 8776 ; update_ec "$?" ;; cinder-volume) [ -f "/usr/bin/cinder-volume" ] ; update_ec "$?" ;; cinder-backup) [ -f "/usr/bin/cinder-backup" ] ; update_ec "$?" ;; cinder-doc|openstack-cinder-doc) echo "Skipping test for $1" EC=0 ;; *) echo "Test not defined for $1" EC=1 ;; esac exit "$EC"