| #!/bin/bash |
| |
| TEMP_POD=$(kubectl get pod -n $NAMESPACE_ENV --selector \ |
| app='{{ include "common.fullname" . }}' -o \ |
| jsonpath='{.items[?(@.metadata.ownerReferences[].kind=="ReplicaSet")].metadata.name}') |
| |
| tmp_MYSQL_PASSWORD=$(echo -n $(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- printenv \ |
| MYSQL_PASSWORD) | base64) |
| |
| tmp_ROOT_PASSWORD=$(echo -n $(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- printenv \ |
| MYSQL_ROOT_PASSWORD) | base64) |
| |
| FLAG_EX_ROOT_SEC='{{ include "common.secret.getSecretNameFast" (dict "global" . "uid" (include "common.mariadb.secret.rootPassUID" .)) }}' |
| |
| FLAG_EX_SEC='{{ include "common.secret.getSecretNameFast" (dict "global" . "uid" (include "common.mariadb.secret.userCredentialsUID" .)) }}' |
| |
| kubectl patch secret $FLAG_EX_ROOT_SEC -p \ |
| '{"data":{"password":"'"$tmp_ROOT_PASSWORD"'"}}' |
| |
| kubectl patch secret $FLAG_EX_SEC -p \ |
| '{"data":{"password":"'"$tmp_MYSQL_PASSWORD"'"}}' |
| |
| MYSQL_USER=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- printenv MYSQL_USER) |
| |
| MYSQL_PASSWORD=$(echo -n $(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- printenv MYSQL_PASSWORD)) |
| |
| MYSQL_ROOT_PASSWORD=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- printenv MYSQL_ROOT_PASSWORD) |
| |
| CURRENT_STS_REPLICA=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| |
| DEPLOYMENT_REPLICA=$(kubectl get deployment -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }}-upgrade-deployment -o \ |
| jsonpath='{.status.replicas}') |
| |
| if [[ $CURRENT_STS_REPLICA == "0" ]] |
| then |
| echo "Seems there was no upgrade of cluster and we will scale up cluster replicas back to $REPLICA_COUNT now" |
| kubectl scale statefulsets {{ include "common.fullname" . }} --replicas=$REPLICA_COUNT |
| fi |
| |
| MY_REPLICA_NUMBER=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| |
| while [[ ! $MY_REPLICA_NUMBER == $REPLICA_COUNT ]] |
| do |
| echo "The cluster is not scaled up to $REPLICA_COUNT yet. Please wait ..." |
| MY_REPLICA_NUMBER=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| echo "The current status of the cluster is $MY_REPLICA_NUMBER" |
| sleep 2 |
| if [[ $MY_REPLICA_NUMBER == $REPLICA_COUNT ]] |
| then |
| break |
| fi |
| done |
| |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" | \ |
| awk '{print $2}') |
| |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| |
| while [[ ! $CLUSTER_NO == $((REPLICA_COUNT+DEPLOYMENT_REPLICA)) ]] \ |
| || [[ ! $CLUSTER_STATE == "Synced" ]] |
| do |
| echo "$CLUSTER_NO and $CLUSTER_STATE" |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" \ |
| | awk '{print $2}') |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| sleep 2 |
| if [[ $CLUSTER_NO == $((REPLICA_COUNT+DEPLOYMENT_REPLICA)) ]] \ |
| && [[ $CLUSTER_STATE == "Synced" ]] |
| then |
| echo "The cluster has $CLUSTER_NO members and $CLUSTER_STATE state." |
| break |
| fi |
| done |
| |
| MYSQL_STATUS=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- mysqladmin \ |
| -uroot -p$MYSQL_ROOT_PASSWORD ping) |
| |
| while [[ ! $MYSQL_STATUS == "mysqld is alive" ]] |
| do |
| echo "Mariadb deployment is not ready yet." |
| sleep 2 |
| MYSQL_STATUS=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- mysqladmin \ |
| -uroot -p$MYSQL_ROOT_PASSWORD ping) |
| if [[ $MYSQL_STATUS == "mysqld is alive" ]] |
| then |
| echo "Mariadb deployment is ready and cluster size is $CLUSTER_NO" |
| break |
| fi |
| done |
| |
| echo "Deleting upgrade deployment now" |
| |
| kubectl delete deployment -n $NAMESPACE_ENV {{ include "common.fullname" . }}-upgrade-deployment |
| kubectl delete secret -n $NAMESPACE_ENV {{ include "common.fullname" . }}-temp-upgrade-root |
| kubectl delete secret -n $NAMESPACE_ENV {{ include "common.fullname" . }}-temp-upgrade-usercred |
| |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" | \ |
| awk '{print $2}') |
| |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| |
| while [[ ! $CLUSTER_NO == $REPLICA_COUNT ]] \ |
| || [[ ! $CLUSTER_STATE == "Synced" ]] |
| do |
| echo "$CLUSTER_NO and $CLUSTER_STATE" |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" \ |
| | awk '{print $2}') |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV {{ include "common.fullname" . }}-0 -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| sleep 2 |
| if [[ $CLUSTER_NO == $REPLICA_COUNT ]] \ |
| && [[ $CLUSTER_STATE == "Synced" ]] |
| then |
| echo "The cluster has $CLUSTER_NO members and $CLUSTER_STATE state." |
| break |
| fi |
| done |
| |
| echo "The cluster upgrade is finished now" |