From f8f88c6f2ff564b6b662b0b3741276c8c9e3d319 Mon Sep 17 00:00:00 2001 From: Sergiy Markin Date: Fri, 24 Jan 2025 23:14:31 +0000 Subject: [PATCH] Add remote backups failover support This PS adds a support for a failover location to upload and retrieve remote backups. Change-Id: I9f79649ebb6efe112bf57d7fbac8d62e8c22a3db --- charts/etcdctl-utility/Chart.yaml | 2 +- .../bin/utility/_etcd_ondemand_job.sh.tpl | 47 ++++++------------ charts/mysqlclient-utility/Chart.yaml | 2 +- .../bin/utility/_mariadb_ondemand_job.sh.tpl | 48 ++++++------------ charts/postgresql-utility/Chart.yaml | 2 +- .../bin/utility/_pg_ondemand_job.sh.tpl | 49 ++++++------------- 6 files changed, 46 insertions(+), 104 deletions(-) diff --git a/charts/etcdctl-utility/Chart.yaml b/charts/etcdctl-utility/Chart.yaml index 8f12c8ae..eaf7fff6 100644 --- a/charts/etcdctl-utility/Chart.yaml +++ b/charts/etcdctl-utility/Chart.yaml @@ -13,4 +13,4 @@ apiVersion: v1 description: etcdctl Client name: etcdctl-utility -version: 0.1.6 +version: 0.1.7 diff --git a/charts/etcdctl-utility/templates/bin/utility/_etcd_ondemand_job.sh.tpl b/charts/etcdctl-utility/templates/bin/utility/_etcd_ondemand_job.sh.tpl index 55e5325a..377a5898 100644 --- a/charts/etcdctl-utility/templates/bin/utility/_etcd_ondemand_job.sh.tpl +++ b/charts/etcdctl-utility/templates/bin/utility/_etcd_ondemand_job.sh.tpl @@ -146,43 +146,24 @@ EOF if $ETCD_REMOTE_BACKUP_ENABLED; then export ETCD_RGW_SECRET={{ $envAll.Values.conf.etcd_backup_restore.secrets.kube_system.rgw_secret }} - cat >> $TMP_FILE << EOF - - name: OS_AUTH_URL + + # Get the list of keys and their values from the secret + SECRET_DATA=$(kubectl get secret $ETCD_RGW_SECRET -n $ETCD_POD_NAMESPACE -o jsonpath="{.data}") + + # Iterate over each key + for KEY_NAME in $(echo $SECRET_DATA | jq -r 'keys[]'); do + KEY_VALUE=$(echo $SECRET_DATA | jq -r --arg key "$KEY_NAME" '.[$key]') + if [ -n "$KEY_VALUE" ]; then + cat >> $TMP_FILE << EOF + - name: ${KEY_NAME} valueFrom: secretKeyRef: name: ${ETCD_RGW_SECRET} - key: OS_AUTH_URL - - name: OS_REGION_NAME - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_REGION_NAME - - name: OS_USERNAME - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_USERNAME - - name: OS_PROJECT_NAME - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_PROJECT_NAME - - name: OS_USER_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_USER_DOMAIN_NAME - - name: OS_PROJECT_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_PROJECT_DOMAIN_NAME - - name: OS_PASSWORD - valueFrom: - secretKeyRef: - name: ${ETCD_RGW_SECRET} - key: OS_PASSWORD + key: ${KEY_NAME} EOF + fi + done + fi cat >> $TMP_FILE << EOF diff --git a/charts/mysqlclient-utility/Chart.yaml b/charts/mysqlclient-utility/Chart.yaml index f863e19a..6e94bd6d 100644 --- a/charts/mysqlclient-utility/Chart.yaml +++ b/charts/mysqlclient-utility/Chart.yaml @@ -13,4 +13,4 @@ apiVersion: v1 description: Porthole MySql Client name: mysqlclient-utility -version: 0.1.9 +version: 0.1.10 diff --git a/charts/mysqlclient-utility/templates/bin/utility/_mariadb_ondemand_job.sh.tpl b/charts/mysqlclient-utility/templates/bin/utility/_mariadb_ondemand_job.sh.tpl index 6634cd24..831b6093 100644 --- a/charts/mysqlclient-utility/templates/bin/utility/_mariadb_ondemand_job.sh.tpl +++ b/charts/mysqlclient-utility/templates/bin/utility/_mariadb_ondemand_job.sh.tpl @@ -14,7 +14,6 @@ export MARIADB_BACKUP_BASE_PATH=$(kubectl get secret -n ${MARIADB_POD_NAMESPACE} MARIADB_REMOTE_BACKUP_ENABLED=$(kubectl get secret -n ${MARIADB_POD_NAMESPACE} ${MARIADB_CONF_SECRET} -o json | jq -r .data.REMOTE_BACKUP_ENABLED | base64 -d) export MARIADB_REMOTE_BACKUP_ENABLED=$(echo $MARIADB_REMOTE_BACKUP_ENABLED | sed 's/"//g') - export TMP_FILE=$(mktemp -p /tmp) if ! kubectl -n ${MARIADB_POD_NAMESPACE} --no-headers=true get secret {{ $envAll.Values.conf.mariadb_backup_restore.secrets.tls_secret }} > /dev/null 2>&1 ; then @@ -171,43 +170,24 @@ EOF if $MARIADB_REMOTE_BACKUP_ENABLED; then export MARIADB_RGW_SECRET={{ $envAll.Values.conf.mariadb_backup_restore.secrets.rgw_secret }} - cat >> $TMP_FILE << EOF - - name: OS_AUTH_URL + + # Get the list of keys and their values from the secret + SECRET_DATA=$(kubectl get secret $MARIADB_RGW_SECRET -n $MARIADB_POD_NAMESPACE -o jsonpath="{.data}") + + # Iterate over each key + for KEY_NAME in $(echo $SECRET_DATA | jq -r 'keys[]'); do + KEY_VALUE=$(echo $SECRET_DATA | jq -r --arg key "$KEY_NAME" '.[$key]') + if [ -n "$KEY_VALUE" ]; then + cat >> $TMP_FILE << EOF + - name: ${KEY_NAME} valueFrom: secretKeyRef: name: ${MARIADB_RGW_SECRET} - key: OS_AUTH_URL - - name: OS_REGION_NAME - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_REGION_NAME - - name: OS_USERNAME - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_USERNAME - - name: OS_PROJECT_NAME - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_PROJECT_NAME - - name: OS_USER_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_USER_DOMAIN_NAME - - name: OS_PROJECT_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_PROJECT_DOMAIN_NAME - - name: OS_PASSWORD - valueFrom: - secretKeyRef: - name: ${MARIADB_RGW_SECRET} - key: OS_PASSWORD + key: ${KEY_NAME} EOF + fi + done + fi if $TLS_ENABLED; then diff --git a/charts/postgresql-utility/Chart.yaml b/charts/postgresql-utility/Chart.yaml index ecd762a7..5cf06974 100644 --- a/charts/postgresql-utility/Chart.yaml +++ b/charts/postgresql-utility/Chart.yaml @@ -14,4 +14,4 @@ apiVersion: v1 description: PostgreSQL Client name: postgresql-utility -version: 0.1.5 +version: 0.1.6 diff --git a/charts/postgresql-utility/templates/bin/utility/_pg_ondemand_job.sh.tpl b/charts/postgresql-utility/templates/bin/utility/_pg_ondemand_job.sh.tpl index 04fc8a06..09c20c43 100644 --- a/charts/postgresql-utility/templates/bin/utility/_pg_ondemand_job.sh.tpl +++ b/charts/postgresql-utility/templates/bin/utility/_pg_ondemand_job.sh.tpl @@ -159,43 +159,24 @@ EOF if $POSTGRESQL_REMOTE_BACKUP_ENABLED; then export POSTGRESQL_RGW_SECRET={{ $envAll.Values.conf.postgresql_backup_restore.secrets.rgw_secret }} - cat >> $TMP_FILE << EOF - - name: OS_AUTH_URL + + # Get the list of keys and their values from the secret + SECRET_DATA=$(kubectl get secret $POSTGRESQL_RGW_SECRET -n $POSTGRESQL_POD_NAMESPACE -o jsonpath="{.data}") + + # Iterate over each key + for KEY_NAME in $(echo $SECRET_DATA | jq -r 'keys[]'); do + KEY_VALUE=$(echo $SECRET_DATA | jq -r --arg key "$KEY_NAME" '.[$key]') + if [ -n "$KEY_VALUE" ]; then + cat >> $TMP_FILE << EOF + - name: ${KEY_NAME} valueFrom: secretKeyRef: name: ${POSTGRESQL_RGW_SECRET} - key: OS_AUTH_URL - - name: OS_REGION_NAME - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_REGION_NAME - - name: OS_USERNAME - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_USERNAME - - name: OS_PROJECT_NAME - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_PROJECT_NAME - - name: OS_USER_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_USER_DOMAIN_NAME - - name: OS_PROJECT_DOMAIN_NAME - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_PROJECT_DOMAIN_NAME - - name: OS_PASSWORD - valueFrom: - secretKeyRef: - name: ${POSTGRESQL_RGW_SECRET} - key: OS_PASSWORD + key: ${KEY_NAME} EOF + fi + done + fi cat >> $TMP_FILE << EOF @@ -248,4 +229,4 @@ cat >> $TMP_FILE << EOF EOF kubectl create -n $POSTGRESQL_POD_NAMESPACE -f $TMP_FILE -rm -rf $TMP_FILE +# rm -rf $TMP_FILE