mistral/tools/docker/start_mistral_rabbit_mysql.sh
Andras Kovi 3c37ef5ed5 Update docker build
Update the Mistral docker image and tooling has been updated to
significantly  ease the starting of a Mistral cluster. The setup
now supports all-in-one and multi-container deployments. Also,
the scripts were cleaned up and aligned with the Docker best
practice.

Change-Id: I803d69ee17e7f5ebc95ec2c81887c4f580d73715
2017-07-03 13:22:44 +02:00

112 lines
2.9 KiB
Bash
Executable File

#! /bin/bash -e
if [ "${1}" == "--help" ]; then
echo '
Synopsis:
start_mistral_rabbit_mysql.sh [single|multi|clean]
Environment variables:
EXTRA_OPTS : extra parameters to be used for all mistral containers (e.g. -v)
MYSQL_ROOT_PASSWORD : password for the MySQL server
SCRATCH : remove all existing containers (RabbitMQ and MySQL are not removed by default)
'
exit 0
fi
MODE=${1:-single}
export MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-strangehat}
MISTRAL_CONTAINERS=$(docker ps -a --format '{{.ID}} {{.Names}}' | grep mistral || true)
if [ -z "$SCRATCH" -a "$MODE" != 'clean' ]; then
MISTRAL_CONTAINERS=$(echo "$MISTRAL_CONTAINERS" | grep -v rabbitmq | grep -v mysql | cat)
fi
if [ -n "$MISTRAL_CONTAINERS" ]; then
echo "Removing existing containers: $MISTRAL_CONTAINERS"
KILLED_CONTAINERS=$(echo "$MISTRAL_CONTAINERS" | awk '{print $1}')
docker kill -s 9 $KILLED_CONTAINERS
docker rm $KILLED_CONTAINERS
fi
if [ "$MODE" == 'clean' ]; then
echo "Clean complete"
exit 0
fi
if [ -z "$(docker ps -aq --filter "Name=mistral-mysql")" ]; then
docker create --name mistral-mysql -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} mysql
fi
docker start mistral-mysql
if [ -z "$(docker ps -aq --filter "Name=mistral-rabbitmq")" ]; then
docker create --name mistral-rabbitmq rabbitmq
fi
docker start mistral-rabbitmq
while true; do
sleep 5
docker exec mistral-mysql \
mysql -u root -pstrangehat \
-e "CREATE DATABASE IF NOT EXISTS mistral;
USE mistral;
GRANT ALL ON mistral.* TO 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'" \
&& break || true
done
sleep 10
docker run -dit --link mistral-mysql:mysql --name mistral-db-setup mistral-all cat
docker exec mistral-db-setup python /opt/stack/mistral/tools/sync_db.py
docker kill -s 9 mistral-db-setup
docker rm mistral-db-setup
function run_mistral() {
NAME=${1:-mistral}
shift || true
LINKS='--link mistral-mysql:mysql --link mistral-rabbitmq:rabbitmq'
docker run \
-d \
--name $NAME \
$LINKS \
${EXTRA_OPTS} \
${OPTS} \
mistral-all "$@"
}
unset OPTS
case "$MODE" in
single)
# Single node setup
# The CMD of the mistral-all image runs the `mistral-server --server all` command.
OPTS="-p 8989:8989" run_mistral
echo "
Enter the container:
docker exec -it mistral bash
List workflows
docker exec mistral mistral workflow-list
"
;;
multi)
# Multinode setup
OPTS="-p 8989:8989" run_mistral "mistral-api" mistral-server --server api
run_mistral "mistral-engine" mistral-server --server engine
run_mistral "mistral-executor-1" mistral-server --server executor
run_mistral "mistral-executor-2" mistral-server --server executor
echo "
List workflows
docker exec mistral-api mistral workflow-list
"
;;
esac