Skip to content

Commit 88ae4b8

Browse files
committed
addiitonal helpers and some improvements
1 parent a7eb61c commit 88ae4b8

4 files changed

+341
-1
lines changed

helpers/mariadb-galera2shared.sh

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/bash
2+
3+
4+
5+
if [ ! "$1" ]; then
6+
echo "please define openshift project as first argument"
7+
exit 1;
8+
fi
9+
10+
set -uo pipefail
11+
12+
which shyaml > /dev/null
13+
if [ $? -gt 0 ]; then
14+
echo "please install shyaml (pip3 install shyaml)"
15+
exit 1
16+
fi
17+
18+
which jq > /dev/null
19+
if [ $? -gt 0 ]; then
20+
echo "please install jq"
21+
exit 1
22+
fi
23+
24+
which svcat > /dev/null
25+
if [ $? -gt 0 ]; then
26+
echo "please install svcat"
27+
exit 1
28+
fi
29+
30+
set -e
31+
32+
PROJECT_NAME=$1
33+
34+
echo "*** Starting mariadb-galera --> mariadb-shared migration in ${PROJECT_NAME}"
35+
36+
SERVICE_NAME=mariadb
37+
SERVICE_NAME_UPPERCASE=$(echo $SERVICE_NAME | tr [:lower:] [:upper:])
38+
SERVICE_TYPE=mariadb-shared
39+
40+
ENVIRONMENT_TYPE=$(oc -n $1 get configmap lagoon-env -o json | jq -r '.data.LAGOON_ENVIRONMENT_TYPE')
41+
42+
OLD_POD="mariadb-galera-0"
43+
44+
if [[ "$OLD_POD" ]]; then
45+
echo "found $SERVICE_NAME pod $OLD_POD"
46+
else
47+
echo "no running pod found for service '${SERVICE_NAME}'', is it running?"
48+
exit 1
49+
fi
50+
51+
echo "*** Pausing nginx and cli"
52+
NGINX_REPLICAS=$(oc -n $1 get dc/nginx -o json | jq -r '.spec.replicas')
53+
CLI_REPLICAS=$(oc -n $1 get dc/cli -o json | jq -r '.spec.replicas')
54+
oc -n $1 scale dc/nginx --replicas=0
55+
oc -n $1 scale dc/cli --replicas=0
56+
57+
58+
# create service broker
59+
## taken from build-deploy-docker-compose.sh
60+
61+
OPENSHIFT_TEMPLATE="$(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/openshift-templates/${SERVICE_TYPE}/servicebroker.yml"
62+
SERVICEBROKER_CLASS="lagoon-dbaas-mariadb-apb"
63+
SERVICEBROKER_PLAN="${ENVIRONMENT_TYPE}"
64+
OPENSHIFT_PROJECT=$1
65+
. $(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/scripts/exec-openshift-create-servicebroker.sh
66+
67+
# ServiceBrokers take a bit, wait until the credentials secret is available
68+
until oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials
69+
do
70+
echo "Secret ${SERVICE_NAME}-servicebroker-credentials not available yet, waiting for 10 secs"
71+
sleep 10
72+
done
73+
74+
# Load credentials out of secret
75+
SECRETS=/tmp/${PROJECT_NAME}-${OLD_POD}-migration.yaml
76+
oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials -o yaml > $SECRETS
77+
78+
DB_HOST=$(cat $SECRETS | shyaml get-value data.DB_HOST | base64 -D)
79+
DB_USER=$(cat $SECRETS | shyaml get-value data.DB_USER | base64 -D)
80+
DB_PASSWORD=$(cat $SECRETS | shyaml get-value data.DB_PASSWORD | base64 -D)
81+
DB_NAME=$(cat $SECRETS | shyaml get-value data.DB_NAME | base64 -D)
82+
DB_PORT=$(cat $SECRETS | shyaml get-value data.DB_PORT | base64 -D)
83+
84+
echo "*** Transfering 'drupal' database from $OLD_POD to $DB_HOST"
85+
# transfer database between from old to new
86+
oc -n $1 exec $OLD_POD -- bash -eo pipefail -c "{ mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db drupal || mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db -S /tmp/mysql.sock -u \$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE; } | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h $DB_HOST -u $DB_USER -p${DB_PASSWORD} -P $DB_PORT $DB_NAME"
87+
88+
CONFIG_BAK="/tmp/${PROJECT_NAME}-$(date +%F-%T)-lagoon-env.yaml"
89+
echo "*** Backing up configmap in case we need to revert: ${CONFIG_BAK}"
90+
oc -n $1 get configmap lagoon-env -o yaml > $CONFIG_BAK
91+
92+
echo "*** updating configmap to point to ${DB_HOST}."
93+
# Add credentials to our configmap, prefixed with the name of the servicename of this servicebroker
94+
oc -n $1 patch --insecure-skip-tls-verify configmap lagoon-env \
95+
-p "{\"data\":{\"${SERVICE_NAME_UPPERCASE}_HOST\":\"${DB_HOST}\", \"${SERVICE_NAME_UPPERCASE}_USERNAME\":\"${DB_USER}\", \"${SERVICE_NAME_UPPERCASE}_PASSWORD\":\"${DB_PASSWORD}\", \"${SERVICE_NAME_UPPERCASE}_DATABASE\":\"${DB_NAME}\", \"${SERVICE_NAME_UPPERCASE}_PORT\":\"${DB_PORT}\"}}"
96+
97+
98+
echo "*** Deleting mariadb service. Scaling old mariadb to 0; you can clean up the DC and pv later"
99+
oc -n $1 delete service mariadb
100+
oc -n $1 scale dc/mariadb-maxscale --replicas=0
101+
oc -n $1 scale statefulset/mariadb-galera --replicas=0
102+
103+
104+
# transfer complete, clean up
105+
rm -f $SECRETS
106+
107+
oc -n $1 scale dc/nginx --replicas=$NGINX_REPLICAS
108+
oc -n $1 scale dc/cli --replicas=$CLI_REPLICAS
109+
110+
oc -n $1 rollout latest dc/nginx
111+
oc -n $1 rollout latest dc/cli
112+
oc -n $1 rollout status dc/nginx
113+
oc -n $1 rollout status dc/cli
114+
echo "*** done."
+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/bin/bash
2+
3+
4+
5+
if [ ! "$1" ]; then
6+
echo "please define openshift project as first argument"
7+
exit 1;
8+
fi
9+
10+
set -uo pipefail
11+
12+
which shyaml > /dev/null
13+
if [ $? -gt 0 ]; then
14+
echo "please install shyaml (pip3 install shyaml)"
15+
exit 1
16+
fi
17+
18+
which jq > /dev/null
19+
if [ $? -gt 0 ]; then
20+
echo "please install jq"
21+
exit 1
22+
fi
23+
24+
which svcat > /dev/null
25+
if [ $? -gt 0 ]; then
26+
echo "please install svcat"
27+
exit 1
28+
fi
29+
30+
set -e
31+
32+
PROJECT_NAME=$1
33+
34+
echo "*** Starting mariadb-single --> mariadb-shared migration in ${PROJECT_NAME}"
35+
36+
SERVICE_NAME=mariadb
37+
SERVICE_NAME_UPPERCASE=$(echo $SERVICE_NAME | tr [:lower:] [:upper:])
38+
SERVICE_TYPE=mariadb-shared
39+
40+
ENVIRONMENT_TYPE=$(oc -n $1 get configmap lagoon-env -o json | jq -r '.data.LAGOON_ENVIRONMENT_TYPE')
41+
42+
MARIADB_REPLICAS=$(oc -n $1 get dc/mariadb -o json | jq -r '.spec.replicas')
43+
44+
if [ "$MARIADB_REPLICAS" == "0" ]; then
45+
oc -n $1 scale dc/mariadb --replicas=1
46+
oc -n $1 rollout status dc/mariadb
47+
fi
48+
49+
# export old mariadb pod name
50+
OLD_POD=$(oc -n $1 get pod -o custom-columns=NAME:.metadata.name --no-headers -l service=$SERVICE_NAME)
51+
52+
if [[ "$OLD_POD" ]]; then
53+
echo "found $SERVICE_NAME pod $OLD_POD"
54+
else
55+
echo "no running pod found for service '${SERVICE_NAME}'', is it running?"
56+
exit 1
57+
fi
58+
59+
# create service broker
60+
## taken from build-deploy-docker-compose.sh
61+
62+
OPENSHIFT_TEMPLATE="$(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/openshift-templates/${SERVICE_TYPE}/servicebroker.yml"
63+
SERVICEBROKER_CLASS="lagoon-dbaas-mariadb-apb"
64+
SERVICEBROKER_PLAN="${ENVIRONMENT_TYPE}"
65+
OPENSHIFT_PROJECT=$1
66+
. $(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/scripts/exec-openshift-create-servicebroker.sh
67+
68+
# ServiceBrokers take a bit, wait until the credentials secret is available
69+
until oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials
70+
do
71+
echo "Secret ${SERVICE_NAME}-servicebroker-credentials not available yet, waiting for 10 secs"
72+
sleep 10
73+
done
74+
75+
# Load credentials out of secret
76+
SECRETS=/tmp/${PROJECT_NAME}-${OLD_POD}-migration.yaml
77+
oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials -o yaml > $SECRETS
78+
79+
DB_HOST=$(cat $SECRETS | shyaml get-value data.DB_HOST | base64 -D)
80+
DB_USER=$(cat $SECRETS | shyaml get-value data.DB_USER | base64 -D)
81+
DB_PASSWORD=$(cat $SECRETS | shyaml get-value data.DB_PASSWORD | base64 -D)
82+
DB_NAME=$(cat $SECRETS | shyaml get-value data.DB_NAME | base64 -D)
83+
DB_PORT=$(cat $SECRETS | shyaml get-value data.DB_PORT | base64 -D)
84+
85+
echo "*** Transfering 'drupal' database from $OLD_POD to $DB_HOST"
86+
# transfer database between from old to new
87+
oc -n $1 exec $OLD_POD -- bash -eo pipefail -c "{ mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db \$MARIADB_DATABASE || mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db -S /tmp/mysql.sock -u \$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE; } | mysql -h $DB_HOST -u $DB_USER -p${DB_PASSWORD} -P $DB_PORT $DB_NAME"
88+
89+
CONFIG_BAK="/tmp/${PROJECT_NAME}-$(date +%F-%T)-lagoon-env.yaml"
90+
echo "*** Backing up configmap in case we need to revert: ${CONFIG_BAK}"
91+
oc -n $1 get configmap lagoon-env -o yaml > $CONFIG_BAK
92+
93+
echo "*** updating configmap to point to ${DB_HOST}."
94+
# Add credentials to our configmap, prefixed with the name of the servicename of this servicebroker
95+
oc -n $1 patch --insecure-skip-tls-verify configmap lagoon-env \
96+
-p "{\"data\":{\"${SERVICE_NAME_UPPERCASE}_HOST\":\"${DB_HOST}\", \"${SERVICE_NAME_UPPERCASE}_USERNAME\":\"${DB_USER}\", \"${SERVICE_NAME_UPPERCASE}_PASSWORD\":\"${DB_PASSWORD}\", \"${SERVICE_NAME_UPPERCASE}_DATABASE\":\"${DB_NAME}\", \"${SERVICE_NAME_UPPERCASE}_PORT\":\"${DB_PORT}\"}}"
97+
98+
99+
echo "*** Deleting mariadb service. Scaling old mariadb to 0; you can clean up the DC and pv later"
100+
oc -n $1 delete service mariadb
101+
oc -n $1 scale dc/mariadb --replicas=0
102+
103+
# transfer complete, clean up
104+
rm -f $SECRETS
105+
106+
echo "*** done."
+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#!/bin/bash
2+
3+
4+
5+
if [ ! "$1" ]; then
6+
echo "please define openshift project as first argument"
7+
exit 1;
8+
fi
9+
10+
set -uo pipefail
11+
12+
which shyaml > /dev/null
13+
if [ $? -gt 0 ]; then
14+
echo "please install shyaml (pip3 install shyaml)"
15+
exit 1
16+
fi
17+
18+
which jq > /dev/null
19+
if [ $? -gt 0 ]; then
20+
echo "please install jq"
21+
exit 1
22+
fi
23+
24+
which svcat > /dev/null
25+
if [ $? -gt 0 ]; then
26+
echo "please install svcat"
27+
exit 1
28+
fi
29+
30+
set -e
31+
32+
PROJECT_NAME=$1
33+
34+
echo "*** Starting mariadb-single --> mariadb-shared migration in ${PROJECT_NAME}"
35+
36+
SERVICE_NAME=mariadb
37+
SERVICE_NAME_UPPERCASE=$(echo $SERVICE_NAME | tr [:lower:] [:upper:])
38+
SERVICE_TYPE=mariadb-shared
39+
40+
ENVIRONMENT_TYPE=$(oc -n $1 get configmap lagoon-env -o json | jq -r '.data.LAGOON_ENVIRONMENT_TYPE')
41+
42+
MARIADB_REPLICAS=$(oc -n $1 get dc/mariadb -o json | jq -r '.spec.replicas')
43+
44+
if [ "$MARIADB_REPLICAS" == "0" ]; then
45+
oc -n $1 scale dc/mariadb --replicas=1
46+
oc -n $1 rollout status dc/mariadb
47+
fi
48+
49+
# export old mariadb pod name
50+
OLD_POD=$(oc -n $1 get pod -o custom-columns=NAME:.metadata.name --no-headers -l service=$SERVICE_NAME)
51+
52+
if [[ "$OLD_POD" ]]; then
53+
echo "found $SERVICE_NAME pod $OLD_POD"
54+
else
55+
echo "no running pod found for service '${SERVICE_NAME}'', is it running?"
56+
exit 1
57+
fi
58+
59+
echo "*** Pausing nginx and cli"
60+
NGINX_REPLICAS=$(oc -n $1 get dc/nginx -o json | jq -r '.spec.replicas')
61+
CLI_REPLICAS=$(oc -n $1 get dc/cli -o json | jq -r '.spec.replicas')
62+
oc -n $1 scale dc/nginx --replicas=0
63+
oc -n $1 scale dc/cli --replicas=0
64+
65+
66+
# create service broker
67+
## taken from build-deploy-docker-compose.sh
68+
69+
OPENSHIFT_TEMPLATE="$(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/openshift-templates/${SERVICE_TYPE}/servicebroker.yml"
70+
SERVICEBROKER_CLASS="lagoon-dbaas-mariadb-apb"
71+
SERVICEBROKER_PLAN="${ENVIRONMENT_TYPE}"
72+
OPENSHIFT_PROJECT=$1
73+
. $(git rev-parse --show-toplevel)/images/oc-build-deploy-dind/scripts/exec-openshift-create-servicebroker.sh
74+
75+
# ServiceBrokers take a bit, wait until the credentials secret is available
76+
until oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials
77+
do
78+
echo "Secret ${SERVICE_NAME}-servicebroker-credentials not available yet, waiting for 10 secs"
79+
sleep 10
80+
done
81+
82+
# Load credentials out of secret
83+
SECRETS=/tmp/${PROJECT_NAME}-${OLD_POD}-migration.yaml
84+
oc -n $1 get --insecure-skip-tls-verify secret ${SERVICE_NAME}-servicebroker-credentials -o yaml > $SECRETS
85+
86+
DB_HOST=$(cat $SECRETS | shyaml get-value data.DB_HOST | base64 -D)
87+
DB_USER=$(cat $SECRETS | shyaml get-value data.DB_USER | base64 -D)
88+
DB_PASSWORD=$(cat $SECRETS | shyaml get-value data.DB_PASSWORD | base64 -D)
89+
DB_NAME=$(cat $SECRETS | shyaml get-value data.DB_NAME | base64 -D)
90+
DB_PORT=$(cat $SECRETS | shyaml get-value data.DB_PORT | base64 -D)
91+
92+
echo "*** Transfering 'drupal' database from $OLD_POD to $DB_HOST"
93+
# transfer database between from old to new
94+
oc -n $1 exec $OLD_POD -- bash -eo pipefail -c "{ mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db lagoon || mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db -S /tmp/mysql.sock -u \$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE; } | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h $DB_HOST -u $DB_USER -p${DB_PASSWORD} -P $DB_PORT $DB_NAME"
95+
96+
CONFIG_BAK="/tmp/${PROJECT_NAME}-$(date +%F-%T)-lagoon-env.yaml"
97+
echo "*** Backing up configmap in case we need to revert: ${CONFIG_BAK}"
98+
oc -n $1 get configmap lagoon-env -o yaml > $CONFIG_BAK
99+
100+
echo "*** updating configmap to point to ${DB_HOST}."
101+
# Add credentials to our configmap, prefixed with the name of the servicename of this servicebroker
102+
oc -n $1 patch --insecure-skip-tls-verify configmap lagoon-env \
103+
-p "{\"data\":{\"${SERVICE_NAME_UPPERCASE}_HOST\":\"${DB_HOST}\", \"${SERVICE_NAME_UPPERCASE}_USERNAME\":\"${DB_USER}\", \"${SERVICE_NAME_UPPERCASE}_PASSWORD\":\"${DB_PASSWORD}\", \"${SERVICE_NAME_UPPERCASE}_DATABASE\":\"${DB_NAME}\", \"${SERVICE_NAME_UPPERCASE}_PORT\":\"${DB_PORT}\"}}"
104+
105+
106+
echo "*** Deleting mariadb service. Scaling old mariadb to 0; you can clean up the DC and pv later"
107+
oc -n $1 delete service mariadb
108+
oc -n $1 scale dc/mariadb --replicas=0
109+
110+
# transfer complete, clean up
111+
rm -f $SECRETS
112+
113+
oc -n $1 scale dc/nginx --replicas=$NGINX_REPLICAS
114+
oc -n $1 scale dc/cli --replicas=$CLI_REPLICAS
115+
116+
oc -n $1 rollout latest dc/nginx
117+
oc -n $1 rollout latest dc/cli
118+
oc -n $1 rollout status dc/nginx
119+
oc -n $1 rollout status dc/cli
120+
echo "*** done."

helpers/mariadb-single2shared.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ DB_PORT=$(cat $SECRETS | shyaml get-value data.DB_PORT | base64 -D)
9191

9292
echo "*** Transfering 'drupal' database from $OLD_POD to $DB_HOST"
9393
# transfer database between from old to new
94-
oc -n $1 exec $OLD_POD -- bash -eo pipefail -c "{ mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db drupal || mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db -S /tmp/mysql.sock -u \$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE; } | mysql -h $DB_HOST -u $DB_USER -p${DB_PASSWORD} -P $DB_PORT $DB_NAME"
94+
oc -n $1 exec $OLD_POD -- bash -eo pipefail -c "{ mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db drupal || mysqldump --max-allowed-packet=500M --events --routines --quick --add-locks --no-autocommit --single-transaction --no-create-db -S /tmp/mysql.sock -u \$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE; } | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -h $DB_HOST -u $DB_USER -p${DB_PASSWORD} -P $DB_PORT $DB_NAME"
9595

9696
CONFIG_BAK="/tmp/${PROJECT_NAME}-$(date +%F-%T)-lagoon-env.yaml"
9797
echo "*** Backing up configmap in case we need to revert: ${CONFIG_BAK}"

0 commit comments

Comments
 (0)