aboutsummaryrefslogtreecommitdiff
path: root/docker/galera
diff options
context:
space:
mode:
Diffstat (limited to 'docker/galera')
-rw-r--r--docker/galera/Dockerfile.j242
-rw-r--r--docker/galera/config-external.sh11
-rwxr-xr-xdocker/galera/config-galera.sh37
-rwxr-xr-xdocker/galera/start.sh25
4 files changed, 115 insertions, 0 deletions
diff --git a/docker/galera/Dockerfile.j2 b/docker/galera/Dockerfile.j2
new file mode 100644
index 000000000..38e66ee14
--- /dev/null
+++ b/docker/galera/Dockerfile.j2
@@ -0,0 +1,42 @@
+FROM {{ namespace }}/{{ base_distro }}-{{ install_type }}-base:{{ tag }}
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+{% if base_distro in ['fedora', 'centos', 'oraclelinux'] %}
+
+RUN yum install -y \
+ MariaDB-Galera-server \
+ MariaDB-client \
+ rsync \
+ galera \
+ socat \
+ hostname \
+ percona-xtrabackup \
+ pv \
+ tar \
+ expect \
+ && rm -rf /var/lib/mysql/*
+
+{% elif base_distro in ['ubuntu', 'debian'] %}
+
+# At the end of this run statement we symlink two folders to match the folder
+# structure of the RPM family for mysql configs. This allows us to not change
+# the config-external.sh code
+# TODO(SamYaple): Remove that symlink once config-external is updated
+RUN apt-get install -y --no-install-recommends \
+ mariadb-galera-server \
+ percona-xtrabackup \
+ socat \
+ expect \
+ && apt-get clean \
+ && rm -rf /var/lib/mysql/* \
+ && ln -s /etc/mysql/conf.d/ /etc/my.cnf.d
+
+{% endif %}
+
+COPY config-galera.sh /opt/kolla/config/
+COPY config-external.sh /opt/kolla/
+COPY start.sh /
+
+CMD ["/start.sh"]
+
+{{ include_footer }}
diff --git a/docker/galera/config-external.sh b/docker/galera/config-external.sh
new file mode 100644
index 000000000..43447a51c
--- /dev/null
+++ b/docker/galera/config-external.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+SOURCE="/opt/kolla/mariadb/galera.cnf"
+TARGET="/etc/my.cnf.d/galera.cnf"
+OWNER="mysql"
+
+# Cluster configuration
+if [[ -f "$SOURCE" ]]; then
+ cp $SOURCE $TARGET
+ chown ${OWNER}: $TARGET
+ chmod 0600 $TARGET
+fi
diff --git a/docker/galera/config-galera.sh b/docker/galera/config-galera.sh
new file mode 100755
index 000000000..e66084001
--- /dev/null
+++ b/docker/galera/config-galera.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+function bootstrap_db {
+ mysqld_safe --wsrep-new-cluster &
+
+ # Waiting for deamon
+ sleep 10
+ expect -c '
+ set timeout 10
+ spawn mysql_secure_installation
+ expect "Enter current password for root (enter for none):"
+ send "\r"
+ expect "Set root password?"
+ send "y\r"
+ expect "New password:"
+ send "'"${DB_ROOT_PASSWORD}"'\r"
+ expect "Re-enter new password:"
+ send "'"${DB_ROOT_PASSWORD}"'\r"
+ expect "Remove anonymous users?"
+ send "y\r"
+ expect "Disallow root login remotely?"
+ send "n\r"
+ expect "Remove test database and access to it?"
+ send "y\r"
+ expect "Reload privilege tables now?"
+ send "y\r"
+ expect eof'
+
+ mysql -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
+ mysql -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
+ mysqladmin -p"${DB_ROOT_PASSWORD}" shutdown
+}
+
+function populate_db {
+ mysql_install_db
+ chown -R mysql: /var/lib/mysql
+}
diff --git a/docker/galera/start.sh b/docker/galera/start.sh
new file mode 100755
index 000000000..f8f8d7f77
--- /dev/null
+++ b/docker/galera/start.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -o errexit
+
+CMD="/usr/bin/mysqld_safe"
+ARGS=""
+
+# loading common functions
+source /opt/kolla/kolla-common.sh
+
+# Execute config strategy
+set_configs
+
+# loading functions
+source /opt/kolla/config/config-galera.sh
+
+# This catches all cases of the BOOTSTRAP variable being set, including empty
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]] && [[ ! -e /var/lib/mysql/cluster.exists ]]; then
+ ARGS="--wsrep-new-cluster"
+ touch /var/lib/mysql/cluster.exists
+ populate_db
+ bootstrap_db
+fi
+
+exec $CMD $ARGS