mirror of
https://github.com/bitnami/containers.git
synced 2026-03-21 15:29:05 +08:00
Merge pull request #2 from bitnami/the-merge
switch to `gcr.io/stacksmith-images/ubuntu:14.04` base image
This commit is contained in:
@@ -1,24 +1,33 @@
|
||||
FROM bitnami/base-ubuntu:14.04-onbuild
|
||||
FROM gcr.io/stacksmith-images/ubuntu:14.04-r05
|
||||
MAINTAINER Bitnami <containers@bitnami.com>
|
||||
|
||||
ENV BITNAMI_APP_NAME=mariadb \
|
||||
BITNAMI_APP_USER=mysql \
|
||||
BITNAMI_APP_DAEMON=mysqld \
|
||||
BITNAMI_APP_VERSION=10.1.11-0 \
|
||||
BITNAMI_APP_OPTIONS="--password bitnami" \
|
||||
MARIADB_PACKAGE_SHA256="59cb45e66e7b9b3697296cca8ad8c988ddc089016fef94b7133587cb838c8505"
|
||||
|
||||
ENV BITNAMI_APP_DIR=$BITNAMI_PREFIX/$BITNAMI_APP_NAME \
|
||||
ENV BITNAMI_APP_DIR=/opt/bitnami/$BITNAMI_APP_NAME \
|
||||
BITNAMI_APP_VOL_PREFIX=/bitnami/$BITNAMI_APP_NAME
|
||||
|
||||
ENV PATH=$BITNAMI_APP_DIR/sbin:$BITNAMI_APP_DIR/bin:$PATH
|
||||
|
||||
COPY pkg-cache/ $BITNAMI_PKG_CACHE/
|
||||
RUN bitnami-pkg unpack $BITNAMI_APP_NAME-$BITNAMI_APP_VERSION
|
||||
|
||||
RUN $BITNAMI_PREFIX/install.sh
|
||||
# these symlinks should be setup by harpoon at unpack
|
||||
RUN mkdir -p $BITNAMI_APP_VOL_PREFIX && \
|
||||
ln -s $BITNAMI_APP_DIR/data $BITNAMI_APP_VOL_PREFIX/data && \
|
||||
ln -s $BITNAMI_APP_DIR/conf $BITNAMI_APP_VOL_PREFIX/conf && \
|
||||
ln -s $BITNAMI_APP_DIR/logs $BITNAMI_APP_VOL_PREFIX/logs
|
||||
|
||||
# temporary fix for mysql client
|
||||
RUN mkdir $BITNAMI_APP_DIR/var && \
|
||||
ln -sf $BITNAMI_APP_DIR/tmp $BITNAMI_APP_DIR/var/mysql
|
||||
|
||||
COPY rootfs/ /
|
||||
|
||||
EXPOSE 3306
|
||||
VOLUME ["$BITNAMI_APP_VOL_PREFIX/data", "$BITNAMI_APP_VOL_PREFIX/conf", "$BITNAMI_APP_VOL_PREFIX/logs"]
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
VOLUME ["$BITNAMI_APP_VOL_PREFIX/data"]
|
||||
|
||||
ENTRYPOINT ["/app-entrypoint.sh"]
|
||||
CMD ["harpoon", "start", "--foreground", "mariadb"]
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
$BITNAMI_APP_NAME cheatsheet:
|
||||
|
||||
ENVIRONMENT VARIABLES:
|
||||
MARIADB_USER: User to be created on first boot (default: root).
|
||||
MARIADB_PASSWORD: Password to be set for MARIADB_USER on first boot (default: none).
|
||||
MARIADB_DATABASE: Database to be created on first boot, accessible by MARIADB_USER (default: none).
|
||||
MARIADB_SERVER_ID: Unique server identifier (default: random number)
|
||||
MARIADB_REPLICATION_MODE: Replication mode. Possible values master/slave (default: none).
|
||||
MARIADB_REPLICATION_USER: Replication user. User is created on master on the first boot (default: none).
|
||||
MARIADB_REPLICATION_PASSWORD: Replication users password. Password is set for MARIADB_REPLICATION_USER on master on the first boot (default: none).
|
||||
MARIADB_MASTER_HOST: Replication masters hostname/ip (parameter available only on slave).
|
||||
MARIADB_MASTER_USER: User on replication master with access to MARIADB_DATABASE. (default: root, parameter available only on slave).
|
||||
MARIADB_MASTER_PASSWORD: Password of user on replication master with access to MARIADB_DATABASE (parameter available only on slave).
|
||||
|
||||
VOLUMES:
|
||||
$BITNAMI_APP_VOL_PREFIX/data: Location of $BITNAMI_APP_NAME data files.
|
||||
$BITNAMI_APP_VOL_PREFIX/conf: Location of my.cnf ($BITNAMI_APP_NAME config file).
|
||||
$BITNAMI_APP_VOL_PREFIX/logs: Location of mysqld.log.
|
||||
|
||||
PORTS:
|
||||
3306: $BITNAMI_APP_NAME default port.
|
||||
|
||||
MISC:
|
||||
Options: You can add extra options during the docker run using the -- prefix.
|
||||
Note: MARIADB_USER works in conjunction with MARIADB_DATABASE environment variable.
|
||||
Tip: Back up the $BITNAMI_APP_VOL_PREFIX/data and $BITNAMI_APP_VOL_PREFIX/conf directories regularly.
|
||||
|
||||
COMMANDS:
|
||||
print-help: Print this page.
|
||||
check-updates: Check if a new version of the $BITNAMI_APP_NAME image is available.
|
||||
|
||||
Visit $GITHUB_PAGE for more information.
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
environment_variables:
|
||||
MARIADB_USER: "User to be created on first boot (default: root)."
|
||||
MARIADB_PASSWORD: "Password to be set for MARIADB_USER on first boot (default: none)."
|
||||
MARIADB_DATABASE: "Database to be created on first boot, accessible by MARIADB_USER (default: none)."
|
||||
MARIADB_SERVER_ID: "Unique server identifier (default: random number)"
|
||||
MARIADB_REPLICATION_MODE: "Replication mode. Possible values master/slave (default: none)."
|
||||
MARIADB_REPLICATION_USER: "Replication user. User is created on master on the first boot (default: none)."
|
||||
MARIADB_REPLICATION_PASSWORD: "Replication users password. Password is set for MARIADB_REPLICATION_USER on master on the first boot (default: none)."
|
||||
MARIADB_MASTER_HOST: "Replication masters hostname/ip (parameter available only on slave)."
|
||||
MARIADB_MASTER_USER: "User on replication master with access to MARIADB_DATABASE. (default: root, parameter available only on slave)."
|
||||
MARIADB_MASTER_PASSWORD: "Password of user on replication master with access to MARIADB_DATABASE (parameter available only on slave)."
|
||||
volumes:
|
||||
$BITNAMI_APP_VOL_PREFIX/data: "Location of $BITNAMI_APP_NAME data files."
|
||||
$BITNAMI_APP_VOL_PREFIX/conf: "Location of my.cnf ($BITNAMI_APP_NAME config file)."
|
||||
$BITNAMI_APP_VOL_PREFIX/logs: "Location of mysqld.log."
|
||||
ports:
|
||||
3306: "$BITNAMI_APP_NAME default port."
|
||||
misc:
|
||||
Options: "You can add extra options during the docker run using the -- prefix."
|
||||
Note: "The user and database creation happens only the first time you run the container."
|
||||
Note: "MARIADB_USER works in conjunction with MARIADB_DATABASE environment variable."
|
||||
Tip: "Back up the $BITNAMI_APP_VOL_PREFIX/data and $BITNAMI_APP_VOL_PREFIX/conf directories regularly."
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# disable DNS lookups
|
||||
(
|
||||
echo "[mysqld]"
|
||||
echo "skip-name-resolve"
|
||||
) >> $BITNAMI_APP_DIR/conf/my.cnf
|
||||
|
||||
# set up default config
|
||||
mv $BITNAMI_APP_DIR/conf $BITNAMI_APP_DIR/conf.defaults
|
||||
|
||||
# remove existing default data and logs
|
||||
rm -rf $BITNAMI_APP_DIR/data
|
||||
rm -rf $BITNAMI_APP_DIR/logs
|
||||
|
||||
# symlink mount points at root to install dir
|
||||
ln -s $BITNAMI_APP_DIR/conf $BITNAMI_APP_VOL_PREFIX/conf
|
||||
ln -s $BITNAMI_APP_DIR/data $BITNAMI_APP_VOL_PREFIX/data
|
||||
ln -s $BITNAMI_APP_DIR/logs $BITNAMI_APP_VOL_PREFIX/logs
|
||||
24
bitnami/mariadb/rootfs/app-entrypoint.sh
Executable file
24
bitnami/mariadb/rootfs/app-entrypoint.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
if [[ "$1" == "harpoon" && "$2" == "start" ]]; then
|
||||
status=`harpoon inspect $BITNAMI_APP_NAME`
|
||||
if [[ "$status" == *'"lifecycle": "unpacked"'* ]]; then
|
||||
harpoon initialize $BITNAMI_APP_NAME --password ${MARIADB_PASSWORD:-password}
|
||||
|
||||
## disable DNS lookups
|
||||
# this should happen in harpoon initialize, controlled by a argument, eg. --skip-name-resolve
|
||||
(
|
||||
echo ""
|
||||
echo "[mysqld]"
|
||||
echo "skip-name-resolve"
|
||||
) >> $BITNAMI_APP_DIR/conf/my.cnf
|
||||
fi
|
||||
|
||||
chown -R $BITNAMI_APP_USER: $BITNAMI_APP_DIR/data || true
|
||||
fi
|
||||
|
||||
exec /entrypoint.sh "$@"
|
||||
@@ -1,153 +0,0 @@
|
||||
# MariaDB Utility functions
|
||||
PROGRAM_OPTIONS="--defaults-file=$BITNAMI_APP_DIR/conf/my.cnf --log-error=$BITNAMI_APP_DIR/logs/mysqld.log --basedir=$BITNAMI_APP_DIR --datadir=$BITNAMI_APP_DIR/data --plugin-dir=$BITNAMI_APP_DIR/lib/plugin --user=$BITNAMI_APP_USER --socket=$BITNAMI_APP_DIR/tmp/mysql.sock --lower-case-table-names=1"
|
||||
|
||||
case "$MARIADB_REPLICATION_MODE" in
|
||||
master )
|
||||
PROGRAM_OPTIONS+=" --server-id=${MARIADB_SERVER_ID:-$RANDOM} --binlog-format=ROW --log-bin=mysql-bin --innodb_flush_log_at_trx_commit=1 --sync-binlog=1"
|
||||
;;
|
||||
slave)
|
||||
PROGRAM_OPTIONS+=" --server-id=${MARIADB_SERVER_ID:-$RANDOM} --binlog-format=ROW --log-bin=mysql-bin --relay-log=mysql-relay-bin --log-slave-updates=1 --read-only=1 ${MARIADB_DATABASE:+--replicate-do-db=$MARIADB_DATABASE}"
|
||||
;;
|
||||
esac
|
||||
|
||||
initialize_database() {
|
||||
echo "==> Initializing MySQL database..."
|
||||
echo ""
|
||||
mysql_install_db --port=3306 --socket=$BITNAMI_APP_DIR/tmp/mysql.sock --basedir=$BITNAMI_APP_DIR --datadir=$BITNAMI_APP_DIR/data > /dev/null 2>&1
|
||||
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER $BITNAMI_APP_DIR/data
|
||||
}
|
||||
|
||||
create_custom_database() {
|
||||
if [ "$MARIADB_DATABASE" ]; then
|
||||
echo "==> Creating database $MARIADB_DATABASE..."
|
||||
echo ""
|
||||
echo "CREATE DATABASE IF NOT EXISTS \`$MARIADB_DATABASE\`;" >> /tmp/init_mysql.sql
|
||||
fi
|
||||
}
|
||||
|
||||
create_mysql_user() {
|
||||
if [ "$MARIADB_REPLICATION_MODE" == "slave" ]; then
|
||||
if [ ! "$MARIADB_USER" ] || [ ! "${MARIADB_PASSWORD}" ] || [ ! "$MARIADB_DATABASE" ]; then
|
||||
echo "==> Trying to fetch MariaDB user/password from the master link..."
|
||||
MARIADB_USER=${MARIADB_USER:-$MASTER_ENV_MARIADB_USER}
|
||||
MARIADB_PASSWORD=${MARIADB_PASSWORD:-$MASTER_ENV_MARIADB_PASSWORD}
|
||||
MARIADB_DATABASE=${MARIADB_DATABASE:-$MASTER_ENV_MARIADB_DATABASE}
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! "$MARIADB_USER" ]; then
|
||||
MARIADB_USER=root
|
||||
fi
|
||||
|
||||
if [ "$MARIADB_USER" != "root" ] && [ ! $MARIADB_DATABASE ]; then
|
||||
echo "In order to use a custom MARIADB_USER you need to provide the MARIADB_DATABASE as well"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
|
||||
echo "==> Creating user $MARIADB_USER..."
|
||||
echo ""
|
||||
|
||||
echo "DELETE FROM mysql.user ;" >> /tmp/init_mysql.sql
|
||||
echo "CREATE USER '${MARIADB_USER}'@'%' IDENTIFIED BY '${MARIADB_PASSWORD}' ;" >> /tmp/init_mysql.sql
|
||||
|
||||
if [ "$MARIADB_USER" = root ]; then
|
||||
echo "==> Creating root user with unrestricted access..."
|
||||
echo "GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;" >> /tmp/init_mysql.sql
|
||||
else
|
||||
echo "==> Granting access to $MARIADB_USER to the database $MARIADB_DATABASE..."
|
||||
echo ""
|
||||
echo "GRANT ALL ON \`${MARIADB_DATABASE}\`.* TO \`${MARIADB_USER}\`@'%' ;" >> /tmp/init_mysql.sql
|
||||
echo "GRANT RELOAD, REPLICATION CLIENT ON *.* TO \`${MARIADB_USER}\`@'%' ;" >> /tmp/init_mysql.sql
|
||||
fi
|
||||
|
||||
echo "FLUSH PRIVILEGES ;" >> /tmp/init_mysql.sql
|
||||
echo "DROP DATABASE IF EXISTS test ; " >> /tmp/init_mysql.sql
|
||||
}
|
||||
|
||||
configure_replication() {
|
||||
case "$MARIADB_REPLICATION_MODE" in
|
||||
master)
|
||||
if [ "$MARIADB_REPLICATION_USER" ]; then
|
||||
echo "==> Creating replication user $MARIADB_REPLICATION_USER..."
|
||||
echo ""
|
||||
|
||||
echo "CREATE USER '$MARIADB_REPLICATION_USER'@'%' IDENTIFIED BY '$MARIADB_REPLICATION_PASSWORD' ;" >> /tmp/init_mysql.sql
|
||||
echo "GRANT REPLICATION SLAVE ON *.* TO '$MARIADB_REPLICATION_USER'@'%' ;" >> /tmp/init_mysql.sql
|
||||
echo "FLUSH PRIVILEGES ;" >> /tmp/init_mysql.sql
|
||||
else
|
||||
echo "In order to setup a replication master you need to provide the MARIADB_REPLICATION_USER as well"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
;;
|
||||
slave)
|
||||
echo "==> Setting up MariaDB slave..."
|
||||
|
||||
echo "==> Trying to fetch MariaDB replication parameters from the master link..."
|
||||
MARIADB_MASTER_HOST=${MARIADB_MASTER_HOST:-$MASTER_PORT_3306_TCP_ADDR}
|
||||
MARIADB_MASTER_USER=${MARIADB_MASTER_USER:-$MASTER_ENV_MARIADB_USER}
|
||||
MARIADB_MASTER_PASSWORD=${MARIADB_MASTER_PASSWORD:-$MASTER_ENV_MARIADB_PASSWORD}
|
||||
MARIADB_REPLICATION_USER=${MARIADB_REPLICATION_USER:-$MASTER_ENV_MARIADB_REPLICATION_USER}
|
||||
MARIADB_REPLICATION_PASSWORD=${MARIADB_REPLICATION_PASSWORD:-$MASTER_ENV_MARIADB_REPLICATION_PASSWORD}
|
||||
|
||||
if [ ! $MARIADB_MASTER_HOST ]; then
|
||||
echo "In order to setup a replication slave you need to provide the MARIADB_MASTER_HOST as well"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! $MARIADB_MASTER_USER ]; then
|
||||
echo "MARIADB_MASTER_USER not specified. Defaulting to root"
|
||||
MARIADB_MASTER_USER=${MARIADB_MASTER_USER:-root}
|
||||
fi
|
||||
|
||||
if [ ! $MARIADB_DATABASE ]; then
|
||||
echo "In order to setup a replication slave you need to provide the MARIADB_DATABASE as well"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! $MARIADB_REPLICATION_USER ]; then
|
||||
echo "In order to setup a replication slave you need to provide the MARIADB_REPLICATION_USER as well"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
echo "==> Setting the master configuration..."
|
||||
echo "CHANGE MASTER TO MASTER_HOST='$MARIADB_MASTER_HOST', MASTER_USER='$MARIADB_REPLICATION_USER', MASTER_PASSWORD='$MARIADB_REPLICATION_PASSWORD';" >> /tmp/init_mysql.sql
|
||||
|
||||
echo "==> Checking if replication master is ready to accept connection (60s timeout)..."
|
||||
timeout=60
|
||||
while ! mysqladmin -u$MARIADB_MASTER_USER ${MARIADB_MASTER_PASSWORD:+-p$MARIADB_MASTER_PASSWORD} -h $MARIADB_MASTER_HOST status >/dev/null 2>&1
|
||||
do
|
||||
timeout=$(expr $timeout - 1)
|
||||
if [[ $timeout -eq 0 ]]; then
|
||||
echo "Could not connect to replication master"
|
||||
echo ""
|
||||
exit -1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
echo
|
||||
|
||||
echo "==> Creating a data snapshot..."
|
||||
mysqldump -u$MARIADB_MASTER_USER ${MARIADB_MASTER_PASSWORD:+-p$MARIADB_MASTER_PASSWORD} -h $MARIADB_MASTER_HOST \
|
||||
--databases $MARIADB_DATABASE --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data --apply-slave-statements --comments=false | tr -d '\012' | sed -e 's/;/;\n/g' >> /tmp/init_mysql.sql
|
||||
echo ""
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
print_mysql_password() {
|
||||
if [ -z $MARIADB_PASSWORD ]; then
|
||||
echo "**none**"
|
||||
else
|
||||
echo $MARIADB_PASSWORD
|
||||
fi
|
||||
}
|
||||
|
||||
print_mysql_database() {
|
||||
if [ $MARIADB_DATABASE ]; then
|
||||
echo "Database: $MARIADB_DATABASE"
|
||||
fi
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
set -e
|
||||
source $BITNAMI_PREFIX/bitnami-utils.sh
|
||||
|
||||
if [ ! "$(ls -A $BITNAMI_APP_VOL_PREFIX/conf)" ]; then
|
||||
generate_conf_files
|
||||
fi
|
||||
|
||||
if [ ! -d $BITNAMI_APP_VOL_PREFIX/data/mysql ]; then
|
||||
|
||||
initialize_database
|
||||
|
||||
create_custom_database
|
||||
|
||||
create_mysql_user
|
||||
|
||||
configure_replication
|
||||
|
||||
print_app_credentials $BITNAMI_APP_NAME $MARIADB_USER `print_mysql_password` `print_mysql_database`
|
||||
else
|
||||
print_container_already_initialized $BITNAMI_APP_NAME
|
||||
fi
|
||||
|
||||
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER \
|
||||
$BITNAMI_APP_VOL_PREFIX/conf/ \
|
||||
$BITNAMI_APP_VOL_PREFIX/logs/ \
|
||||
$BITNAMI_APP_VOL_PREFIX/data/ || true
|
||||
@@ -1 +0,0 @@
|
||||
/bin/true
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
set -e
|
||||
source $BITNAMI_PREFIX/bitnami-utils.sh
|
||||
|
||||
exec s6-setuidgid $BITNAMI_APP_USER tail -f -n 1000 $BITNAMI_APP_VOL_PREFIX/logs/*.log 2>/dev/null
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
failcount=0
|
||||
if [ -f $BITNAMI_APP_DIR/tmp/failcount ]; then
|
||||
failcount=$(cat $BITNAMI_APP_DIR/tmp/failcount)
|
||||
fi
|
||||
|
||||
start=$(cat $BITNAMI_APP_DIR/tmp/start)
|
||||
stop=`date '+%d%H%M%S'`
|
||||
interval=`expr $stop - $start`
|
||||
if test $interval -lt 30 ; then
|
||||
failcount=`expr $failcount + 1`
|
||||
else
|
||||
failcount=0
|
||||
fi
|
||||
echo -n $failcount > $BITNAMI_APP_DIR/tmp/failcount
|
||||
|
||||
# bring down container on frequent failures. something is definitely wrong
|
||||
if test $failcount -ge 3 ; then
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
fi
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
set -e
|
||||
source $BITNAMI_PREFIX/bitnami-utils.sh
|
||||
|
||||
mkdir -p $BITNAMI_APP_DIR/tmp
|
||||
chown -R $BITNAMI_APP_USER:$BITNAMI_APP_USER $BITNAMI_APP_DIR/tmp || true
|
||||
|
||||
if [ -f /tmp/init_mysql.sql ]; then
|
||||
PROGRAM_OPTIONS="$PROGRAM_OPTIONS --init-file=/tmp/init_mysql.sql"
|
||||
fi
|
||||
|
||||
date '+%d%H%M%S' > $BITNAMI_APP_DIR/tmp/start
|
||||
exec $BITNAMI_APP_DAEMON $PROGRAM_OPTIONS ${EXTRA_OPTIONS:+"$EXTRA_OPTIONS"}
|
||||
@@ -1,25 +1,25 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
MARIADB_DEFAULT_PASSWORD=password
|
||||
MARIADB_DATABASE=test_database
|
||||
MARIADB_USER=test_user
|
||||
MARIADB_PASSWORD=test_password
|
||||
MARIADB_REPLICATION_USER=repl_user
|
||||
MARIADB_REPLICATION_PASSWORD=repl_password
|
||||
|
||||
# source the helper script
|
||||
APP_NAME=mariadb
|
||||
SLEEP_TIME=10
|
||||
SLEEP_TIME=20
|
||||
VOL_PREFIX=/bitnami/$APP_NAME
|
||||
VOLUMES=$VOL_PREFIX/data
|
||||
load tests/docker_helper
|
||||
|
||||
# Link to container and execute mysql client
|
||||
# $1 : name of the container to link to
|
||||
# ${@:2} : arguments for the mysql command
|
||||
mysql_client() {
|
||||
container_link_and_run_command $1 mysql --no-defaults -h $APP_NAME -P 3306 "${@:2}"
|
||||
container_link_and_run_command $1 mysql --no-defaults -h$APP_NAME -P3306 "${@:2}"
|
||||
}
|
||||
|
||||
cleanup_environment() {
|
||||
container_remove_full slave0
|
||||
container_remove_full default
|
||||
}
|
||||
|
||||
@@ -34,91 +34,74 @@ cleanup_environment
|
||||
container_create default -d
|
||||
|
||||
# ping mysqld server
|
||||
run container_link_and_run_command default mysqladmin --no-defaults -h $APP_NAME -P 3306 ping
|
||||
run container_link_and_run_command default mysqladmin --no-defaults \
|
||||
-h$APP_NAME -P3306 -uroot -p$MARIADB_DEFAULT_PASSWORD ping
|
||||
[[ "$output" =~ "mysqld is alive" ]]
|
||||
}
|
||||
|
||||
@test "Root user created without password" {
|
||||
@test "Root user can't access server without a password" {
|
||||
container_create default -d
|
||||
|
||||
# auth as root user and list all databases
|
||||
run mysql_client default -uroot -e 'SHOW DATABASES\G;'
|
||||
[[ "$output" =~ "Access denied for user" ]]
|
||||
}
|
||||
|
||||
@test "Root user created with default password" {
|
||||
container_create default -d
|
||||
|
||||
# auth as root user and list all databases
|
||||
run mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e 'SHOW DATABASES\G;'
|
||||
[[ "$output" =~ "Database: mysql" ]]
|
||||
}
|
||||
|
||||
@test "Root user created with password" {
|
||||
container_create default -d \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD
|
||||
|
||||
# cannot auth as root without password
|
||||
run mysql_client default -uroot -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Access denied for user" ]]
|
||||
@test "Root user created with custom password" {
|
||||
container_create default -d
|
||||
|
||||
# auth as root with password and list all databases
|
||||
run mysql_client default -uroot -p$MARIADB_PASSWORD -e "SHOW DATABASES\G"
|
||||
run mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: mysql" ]]
|
||||
}
|
||||
|
||||
@test "Root user has access to admin database" {
|
||||
container_create default -d
|
||||
run mysql_client default -uroot -e "SHOW DATABASES\G"
|
||||
|
||||
run mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ 'Database: mysql' ]]
|
||||
}
|
||||
|
||||
@test "Custom database created" {
|
||||
container_create default -d \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE
|
||||
@test "Root user can create new databases" {
|
||||
container_create default -d
|
||||
|
||||
# auth as root and check if MARIADB_DATABASE exists
|
||||
run mysql_client default -uroot -e "SHOW DATABASES\G"
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "CREATE DATABASE \`$MARIADB_DATABASE\`;"
|
||||
|
||||
# check if database was created
|
||||
run mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
|
||||
}
|
||||
|
||||
@test "Can't create a custom user without database" {
|
||||
# create container without specifying MARIADB_DATABASE
|
||||
run container_create default \
|
||||
-e MARIADB_USER=$MARIADB_USER
|
||||
[[ "$output" =~ "you need to provide the MARIADB_DATABASE" ]]
|
||||
}
|
||||
@test "Root user can create new users" {
|
||||
container_create default -d
|
||||
|
||||
@test "Create custom user and database without password" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "CREATE USER '$MARIADB_USER'@'%' IDENTIFIED BY '$MARIADB_PASSWORD';"
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "CREATE DATABASE \`$MARIADB_DATABASE\`;"
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "GRANT ALL ON \`$MARIADB_DATABASE\`.* TO \`$MARIADB_USER\`@'%' ;"
|
||||
|
||||
# cannot auth as root
|
||||
run mysql_client default -uroot -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Access denied for user" ]]
|
||||
|
||||
# auth as MARIADB_USER and check of MARIADB_DATABASE exists
|
||||
run mysql_client default -u$MARIADB_USER -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
|
||||
}
|
||||
|
||||
@test "Create custom user and database with password" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD
|
||||
|
||||
# auth as MARIADB_USER with password and check if MARIADB_DATABASE exists
|
||||
# check if user was created
|
||||
run mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
|
||||
}
|
||||
|
||||
@test "User and password settings are preserved after restart" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD
|
||||
@test "Data is preserved on container restart" {
|
||||
container_create default -d
|
||||
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "CREATE USER '$MARIADB_USER'@'%' IDENTIFIED BY '$MARIADB_PASSWORD';"
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "CREATE DATABASE \`$MARIADB_DATABASE\`;"
|
||||
mysql_client default -uroot -p$MARIADB_DEFAULT_PASSWORD -e "GRANT ALL ON \`$MARIADB_DATABASE\`.* TO \`$MARIADB_USER\`@'%' ;"
|
||||
|
||||
# restart container
|
||||
container_restart default
|
||||
|
||||
# get container logs
|
||||
run container_logs default
|
||||
[[ "$output" =~ "The credentials were set on first boot." ]]
|
||||
|
||||
# auth as MARIADB_USER and check if MARIADB_DATABASE exists
|
||||
run mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
|
||||
@@ -130,34 +113,22 @@ cleanup_environment
|
||||
# get container introspection details and check if volumes are exposed
|
||||
run container_inspect default --format {{.Mounts}}
|
||||
[[ "$output" =~ "$VOL_PREFIX/data" ]]
|
||||
[[ "$output" =~ "$VOL_PREFIX/conf" ]]
|
||||
[[ "$output" =~ "$VOL_PREFIX/logs" ]]
|
||||
}
|
||||
|
||||
@test "Data gets generated in conf, data and logs if bind mounted in the host" {
|
||||
container_create_with_host_volumes default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD
|
||||
|
||||
# files expected in conf volume
|
||||
run container_exec default ls -la $VOL_PREFIX/conf/
|
||||
[[ "$output" =~ "my.cnf" ]]
|
||||
@test "Data gets generated in data volume if bind mounted in the host" {
|
||||
container_create_with_host_volumes default -d
|
||||
|
||||
# files expected in data volume (subset)
|
||||
run container_exec default ls -la $VOL_PREFIX/data/
|
||||
[[ "$output" =~ "mysql" ]]
|
||||
[[ "$output" =~ "ibdata1" ]]
|
||||
|
||||
# files expected in logs volume
|
||||
run container_exec default ls -la $VOL_PREFIX/logs/
|
||||
[[ "$output" =~ "mysqld.log" ]]
|
||||
}
|
||||
|
||||
@test "If host mounted, password and settings are preserved after deletion" {
|
||||
# known to fail
|
||||
skip
|
||||
|
||||
container_create_with_host_volumes default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD
|
||||
|
||||
# stop and remove container
|
||||
@@ -166,222 +137,6 @@ cleanup_environment
|
||||
# recreate container without specifying any env parameters
|
||||
container_create_with_host_volumes default -d
|
||||
|
||||
# auth as MARIADB_USER and check of MARIADB_DATABASE exists
|
||||
run mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
|
||||
}
|
||||
|
||||
@test "Configuration changes are preserved after deletion" {
|
||||
container_create_with_host_volumes default -d
|
||||
|
||||
# modify my.cnf
|
||||
container_exec default sed -i 's|^[#]*[ ]*max_allowed_packet[ ]*=.*|max_allowed_packet=64M|' $VOL_PREFIX/conf/my.cnf
|
||||
container_exec default sed -i 's|^[#]*[ ]*bind-address[ ]*=.*|bind-address=0.0.0.0|' $VOL_PREFIX/conf/my.cnf
|
||||
|
||||
# stop and remove container
|
||||
container_remove default
|
||||
|
||||
# relaunch container with host volumes
|
||||
container_create_with_host_volumes default -d
|
||||
|
||||
run container_exec default cat $VOL_PREFIX/conf/my.cnf
|
||||
[[ "$output" =~ "max_allowed_packet=64M" ]]
|
||||
[[ "$output" =~ "bind-address=0.0.0.0" ]]
|
||||
}
|
||||
|
||||
@test "Can't setup replication master without replication user" {
|
||||
# create replication master without specifying MARIADB_REPLICATION_USER
|
||||
run container_create default \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master
|
||||
[[ "$output" =~ "you need to provide the MARIADB_REPLICATION_USER" ]]
|
||||
}
|
||||
|
||||
@test "Can't setup replication slave without master host" {
|
||||
# create replication slave without specifying MARIADB_MASTER_HOST
|
||||
run container_create slave0 \
|
||||
-e MARIADB_REPLICATION_MODE=slave
|
||||
[[ "$output" =~ "you need to provide the MARIADB_MASTER_HOST" ]]
|
||||
}
|
||||
|
||||
@test "Can't setup replication slave without database" {
|
||||
# create replication slave without specifying MARIADB_DATABASE
|
||||
run container_create slave0 \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_MASTER_HOST=master \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER
|
||||
[[ "$output" =~ "you need to provide the MARIADB_DATABASE" ]]
|
||||
}
|
||||
|
||||
@test "Can't setup replication slave without replication user" {
|
||||
# create replication slave without specifying MARIADB_REPLICATION_USER
|
||||
run container_create slave0 \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_MASTER_HOST=master \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE
|
||||
[[ "$output" =~ "you need to provide the MARIADB_REPLICATION_USER" ]]
|
||||
}
|
||||
|
||||
@test "Master database is replicated on slave" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
container_create slave0 -d \
|
||||
$(container_link default $CONTAINER_NAME) \
|
||||
-e MARIADB_MASTER_HOST=$CONTAINER_NAME \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER \
|
||||
-e MARIADB_MASTER_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# create users table on master and insert a record
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e \
|
||||
"CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(30), datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)); \
|
||||
INSERT INTO users(name) VALUES ('Marko');"
|
||||
|
||||
# verify that record is replicated on slave0
|
||||
run mysql_client slave0 -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT * FROM users\G"
|
||||
[[ "$output" =~ "name: Marko" ]]
|
||||
}
|
||||
|
||||
@test "Can setup replication without password for replication user" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER
|
||||
|
||||
container_create slave0 -d \
|
||||
$(container_link default $CONTAINER_NAME) \
|
||||
-e MARIADB_MASTER_HOST=$CONTAINER_NAME \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER \
|
||||
-e MARIADB_MASTER_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER
|
||||
|
||||
# create users table on master and insert a record
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e \
|
||||
"CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(30), datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)); \
|
||||
INSERT INTO users(name) VALUES ('Marko');"
|
||||
|
||||
# verify that record is replicated on slave0
|
||||
run mysql_client slave0 -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT * FROM users\G"
|
||||
[[ "$output" =~ "name: Marko" ]]
|
||||
}
|
||||
|
||||
@test "Replication slave can fetch replication parameters from link alias \"master\"" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# create replication slave0 linked to master with alias named master
|
||||
container_create slave0 -d \
|
||||
$(container_link default master) \
|
||||
-e MARIADB_REPLICATION_MODE=slave
|
||||
|
||||
# create users table on master and insert a new row
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e \
|
||||
"CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(30), datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)); \
|
||||
INSERT INTO users(name) VALUES ('Marko');"
|
||||
|
||||
# check if row is replicated on slave0
|
||||
run mysql_client slave0 -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT * FROM users\G"
|
||||
[[ "$output" =~ "name: Marko" ]]
|
||||
}
|
||||
|
||||
@test "Slave synchronizes with the master (delayed start)" {
|
||||
container_create default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# create users table on master and insert a new row
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e \
|
||||
"CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(30), datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)) ;
|
||||
INSERT INTO users(name) VALUES ('Marko');"
|
||||
|
||||
# start slave0 linked to the master
|
||||
container_create slave0 -d \
|
||||
$(container_link default $CONTAINER_NAME) \
|
||||
-e MARIADB_MASTER_HOST=$CONTAINER_NAME \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER \
|
||||
-e MARIADB_MASTER_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# verify that master data is replicated on slave
|
||||
run mysql_client slave0 -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT * FROM users\G"
|
||||
[[ "$output" =~ "name: Marko" ]]
|
||||
}
|
||||
|
||||
@test "Replication status is preserved after deletion" {
|
||||
# create master container with host mounted volumes
|
||||
container_create_with_host_volumes default -d \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=master \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# create users table on master and insert a new row
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e \
|
||||
"CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(30), datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id)) ;
|
||||
INSERT INTO users(name) VALUES ('Marko');"
|
||||
|
||||
# create slave0 container with host mounted volumes, should replicate the master data
|
||||
container_create_with_host_volumes slave0 -d \
|
||||
$(container_link default $CONTAINER_NAME) \
|
||||
-e MARIADB_MASTER_HOST=$CONTAINER_NAME \
|
||||
-e MARIADB_MASTER_USER=$MARIADB_USER \
|
||||
-e MARIADB_MASTER_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_USER=$MARIADB_USER \
|
||||
-e MARIADB_PASSWORD=$MARIADB_PASSWORD \
|
||||
-e MARIADB_DATABASE=$MARIADB_DATABASE \
|
||||
-e MARIADB_REPLICATION_MODE=slave \
|
||||
-e MARIADB_REPLICATION_USER=$MARIADB_REPLICATION_USER \
|
||||
-e MARIADB_REPLICATION_PASSWORD=$MARIADB_REPLICATION_PASSWORD
|
||||
|
||||
# stop and remove master and slave0 containers
|
||||
container_remove default
|
||||
container_remove slave0
|
||||
|
||||
# start master and slave0 containers with existing host volumes and no additional env arguments other than MARIADB_REPLICATION_MODE
|
||||
container_create_with_host_volumes default -d -e MARIADB_REPLICATION_MODE=master
|
||||
container_create_with_host_volumes slave0 -d $(container_link default $CONTAINER_NAME) -e MARIADB_REPLICATION_MODE=slave
|
||||
|
||||
# insert new row into the master database
|
||||
mysql_client default -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "INSERT INTO users(name) VALUES ('Polo')"
|
||||
|
||||
# verify that all previous and new data is replicated on slave0
|
||||
run mysql_client slave0 -u$MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE -e "SELECT * FROM users\G"
|
||||
[[ "$output" =~ "name: Marko" ]]
|
||||
[[ "$output" =~ "name: Polo" ]]
|
||||
run mysql_client default -uroot -p$MARIADB_PASSWORD -e "SHOW DATABASES\G"
|
||||
[[ "$output" =~ "Database: mysql" ]]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user