From f7920522ac05d76f6d6b405a0b17531136cbae2e Mon Sep 17 00:00:00 2001 From: Jean-Marie Renouard Date: Tue, 1 Oct 2019 01:11:38 +0200 Subject: [PATCH] Tools for test suies based on Docker --- build/bashrc | 36 ++++++++++++++ build/configimg.conf | 15 ++++++ build/createMassDockerImages.sh | 85 +++++++++++++++++++++++++++++++++ build/fetchSampleDatabases.sh | 6 ++- 4 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 build/configimg.conf create mode 100644 build/createMassDockerImages.sh diff --git a/build/bashrc b/build/bashrc index 6913dbb..4bdb844 100644 --- a/build/bashrc +++ b/build/bashrc @@ -6,3 +6,39 @@ alias lh='ls -lsh' alias la='ls -lsa' alias gam='git status | grep "modified" | cut -d: -f2 | xargs -n 1 git add' alias serve="python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')" + + +gen_mysqlalias() +{ + input="$1" + + while IFS='' read -r line + do + [ -z "$line" ] && continue + container_port=$(echo "$line" | cut -d\; -f1) + container_name=$(echo "$line" | cut -d\; -f2) + container_datadir=$(echo "$line" | cut -d\; -f3) + image_name=$(echo "$line" | cut -d\; -f4) + + alias mysql_$container_name="mysql -u root -h 127.0.0.1 -P $container_port" + done < "$input" +} + +exec_mysqls() +{ + input="$1" + db=$2 + sqlfile=$3 + while IFS='' read -r line + do + [ -z "$line" ] && continue + container_port=$(echo "$line" | cut -d\; -f1) + container_name=$(echo "$line" | cut -d\; -f2) + container_datadir=$(echo "$line" | cut -d\; -f3) + image_name=$(echo "$line" | cut -d\; -f4) + + + echo "* Executing $sqlfile on $container_name" + cat $sqlfile | mysql -u root -h 127.0.0.1 -P $container_port + done < "$input" +} \ No newline at end of file diff --git a/build/configimg.conf b/build/configimg.conf new file mode 100644 index 0000000..b641cb7 --- /dev/null +++ b/build/configimg.conf @@ -0,0 +1,15 @@ +3306;mysql80;/var/lib/mysql8;mysql:8.0 +3307;mysql57;/var/lib/mysql57;mysql:5.7 +3308;mysql56;/var/lib/mysql56;mysql:5.6 +3309;mysql55;/var/lib/mysql55;mysql:5.5 + +4306;percona80;/var/lib/percona8;percona/percona-server:8.0 +4307;percona57;/var/lib/percona57;percona/percona-server:5.7 +4308;percona56;/var/lib/percona56;percona/percona-server:5.6 + +5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 +5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 +5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 +5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 +5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 +5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 diff --git a/build/createMassDockerImages.sh b/build/createMassDockerImages.sh new file mode 100644 index 0000000..ceac7df --- /dev/null +++ b/build/createMassDockerImages.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +input="./build/configimg.conf" +default_password="secret" +#rm -f $input +[ -f "$input" ] || echo " +3306;mysql80;/var/lib/mysql8;mysql:8.0 +3307;mysql57;/var/lib/mysql57;mysql:5.7 +3308;mysql56;/var/lib/mysql56;mysql:5.6 +3309;mysql55;/var/lib/mysql55;mysql:5.5 + +4306;percona80;/var/lib/percona8;percona/percona-server:8.0 +4307;percona57;/var/lib/percona57;percona/percona-server:5.7 +4308;percona56;/var/lib/percona56;percona/percona-server:5.6 + +5306;mariadb104;/var/lib/mariadb104;mariadb:10.4 +5307;mariadb103;/var/lib/mariadb103;mariadb:10.3 +5308;mariadb102;/var/lib/mariadb102;mariadb:10.2 +5309;mariadb101;/var/lib/mariadb101;mariadb:10.1 +5310;mariadb100;/var/lib/mariadb100;mariadb:10.0 +5311;mariadb55;/var/lib/mariadb55;mariadb:5.5 +" > $input + + +# + +echo '* PRUNING DOCKER SYSTEM DATA' + +#[ "$1" = "clean" ] || docker system prune -a -f +# download all images +while IFS='' read -r line +do + [ -z "$line" ] && continue + container_port=$(echo "$line" | cut -d\; -f1) + container_name=$(echo "$line" | cut -d\; -f2) + container_datadir=$(echo "$line" | cut -d\; -f3) + image_name=$(echo "$line" | cut -d\; -f4) + + if [ -n "$1" -a "$1" != "clean" ]; then + echo $line | grep -q "$1" + [ $? -eq 0 ] || continue + fi + echo "* PULLING DOCKER IMAGE: $image_name" + docker pull $image_name + + echo "* REMOVING CONTAINER : $image_name" + docker ps -a | grep -qE "$container_name^" + docker rm -f $container_name + + echo "* DELETING DATADIR: $container_datadir" + sudo rm -rf $container_datadir + [ "$1" = "clean" ] && continue + + echo "* CREATING DATADIR: $container_datadir" + sudo mkdir $container_datadir + #sudo chown -R mysql.mysql $container_datadir + sudo chmod 777 $container_datadir + echo "* STARTING CONTAINER: $container_name($container_port/TCP) BASED ON $image_name -> $container_datadir" + set -x + docker run -d -e MYSQL_ROOT_PASSWORD=$default_password -p $container_port:3306 --name $container_name -v $container_datadir:/var/lib/mysql $image_name + set +x + sleep 6s + echo "* LOGS: $container_name" + docker logs $container_name + echo "* LISTING PORTS: $container_name BASED ON $image_name" + docker port $container_name + + echo "* LISTING VOLUMES: $container_name BASED ON $image_name" + docker inspect -f "{{ .Mounts }}" $container_name + + echo "* LISTING $container_datadir" + ls -ls $container_datadir + #break + docker logs $container_name | grep -q "ready for connections" + alias mysql_$container_name="mysql -u root -P $container_port" +done < "$input" + +[ "$1" = "clean" ] || docker system prune -a -f + +echo "* LISTING DOCKER IMAGES" +docker images + +echo "* LISTING DOCKER CONTAINER" +docker ps + diff --git a/build/fetchSampleDatabases.sh b/build/fetchSampleDatabases.sh index 3b07f8b..b0710e7 100644 --- a/build/fetchSampleDatabases.sh +++ b/build/fetchSampleDatabases.sh @@ -21,7 +21,11 @@ case "$1" in "fetch") [ -z "$2" ] && exit 1 mkdir -p ./contents - wget -O contents/$(basename $(getVal "DB_$2_URL")) $(getVal "DB_$2_URL") + [ -f "contents/$(basename $(getVal "DB_$2_URL"))" ] || wget -O contents/$(basename $(getVal "DB_$2_URL")) $(getVal "DB_$2_URL") + [ $? -eq 0 ] && (cd contents;unzip $(basename $(getVal "DB_$2_URL"))) + ;; + "clean") + rm -rf contents ;; "load")