From b4d00cfe040c4ea9807194d0c28f90db3db09939 Mon Sep 17 00:00:00 2001 From: rjshrjndrn Date: Thu, 15 Aug 2024 11:40:38 +0200 Subject: [PATCH] chore(helm): Adding opereplay config map for Installation agnostic version access. This is useful for db migration, especially when we install using argo, or other means precedence to the autogenereated prev version. Set migration is true if its argo deployment fix the forceMigration override --- scripts/helmcharts/openreplay/files/dbops.sh | 128 ++++++++++-------- .../openreplay/templates/configmap.yaml | 10 ++ .../helmcharts/openreplay/templates/job.yaml | 28 +++- scripts/helmcharts/openreplay/values.yaml | 5 + 4 files changed, 111 insertions(+), 60 deletions(-) create mode 100644 scripts/helmcharts/openreplay/templates/configmap.yaml diff --git a/scripts/helmcharts/openreplay/files/dbops.sh b/scripts/helmcharts/openreplay/files/dbops.sh index 0df923178..e5b208ca3 100644 --- a/scripts/helmcharts/openreplay/files/dbops.sh +++ b/scripts/helmcharts/openreplay/files/dbops.sh @@ -5,9 +5,22 @@ cd $(dirname $0) is_migrate=$1 +# Check if the openreplay version is set. +# This will take precedence over the .Values.fromVersion variable +# Because its created by installation programatically. +if [[ -n $OPENREPLAY_VERSION ]]; then + is_migrate=true + PREVIOUS_APP_VERSION=$OPENREPLAY_VERSION + echo "$OPENREPLAY_VERSION set" +fi + +if [[ $FORCE_MIGRATION == "true" ]]; then + is_migrate=true +fi + # Converting alphaneumeric to number. -PREVIOUS_APP_VERSION=`echo $PREVIOUS_APP_VERSION | cut -d "v" -f2` -CHART_APP_VERSION=`echo $CHART_APP_VERSION | cut -d "v" -f2` +PREVIOUS_APP_VERSION=$(echo $PREVIOUS_APP_VERSION | cut -d "v" -f2) +CHART_APP_VERSION=$(echo $CHART_APP_VERSION | cut -d "v" -f2) function migration() { ls -la /opt/openreplay/openreplay @@ -36,72 +49,71 @@ function migration() { # We need to remove version dots function normalise_version { - echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }' + echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }' } - all_versions=(`ls -l db/init_dbs/$db | grep -E ^d | grep -v create | awk '{print $NF}'`) - migration_versions=(`for ver in ${all_versions[*]}; do if [[ $(normalise_version $ver) > $(normalise_version "${PREVIOUS_APP_VERSION}") ]]; then echo $ver; fi; done | sort -V`) + all_versions=($(ls -l db/init_dbs/$db | grep -E ^d | grep -v create | awk '{print $NF}')) + migration_versions=($(for ver in ${all_versions[*]}; do if [[ $(normalise_version $ver) > $(normalise_version "${PREVIOUS_APP_VERSION}") ]]; then echo $ver; fi; done | sort -V)) echo "Migration version: ${migration_versions[*]}" # Can't pass the space seperated array to ansible for migration. So joining them with , - joined_migration_versions=$(IFS=, ; echo "${migration_versions[*]}") - + joined_migration_versions=$( + IFS=, + echo "${migration_versions[*]}" + ) + cd - case "$1" in - postgresql) - /bin/bash postgresql.sh migrate $joined_migration_versions - ;; - minio) - /bin/bash minio.sh migrate $joined_migration_versions - ;; - clickhouse) - /bin/bash clickhouse.sh migrate $joined_migration_versions - ;; - kafka) - /bin/bash kafka.sh migrate $joined_migration_versions - ;; - *) - echo "Unknown operation for db migration; exiting." - exit 1 - ;; - esac -} - -function init(){ - case $1 in - postgresql) - /bin/bash postgresql.sh init - ;; - minio) - /bin/bash minio.sh migrate $migration_versions - ;; - clickhouse) - /bin/bash clickhouse.sh init - ;; - kafka) - /bin/bash kafka.sh init - ;; - *) - echo "Unknown operation for db init; exiting." - exit 1 - ;; - - esac -} - -if [[ $FORCE_MIGRATION == "true" ]]; then - is_migrate=true -fi - -# dbops.sh true(upgrade) clickhouse -case "$is_migrate" in - "false") - init $2 + postgresql) + /bin/bash postgresql.sh migrate $joined_migration_versions ;; - "true") - migration $2 + minio) + /bin/bash minio.sh migrate $joined_migration_versions + ;; + clickhouse) + /bin/bash clickhouse.sh migrate $joined_migration_versions + ;; + kafka) + /bin/bash kafka.sh migrate $joined_migration_versions ;; *) echo "Unknown operation for db migration; exiting." exit 1 ;; + esac +} + +function init() { + case $1 in + postgresql) + /bin/bash postgresql.sh init + ;; + minio) + /bin/bash minio.sh migrate $migration_versions + ;; + clickhouse) + /bin/bash clickhouse.sh init + ;; + kafka) + /bin/bash kafka.sh init + ;; + *) + echo "Unknown operation for db init; exiting." + exit 1 + ;; + + esac +} + +# dbops.sh true(upgrade) clickhouse +case "$is_migrate" in +"false") + init $2 + ;; +"true") + migration $2 + ;; +*) + echo "Unknown operation for db migration; exiting." + exit 1 + ;; esac diff --git a/scripts/helmcharts/openreplay/templates/configmap.yaml b/scripts/helmcharts/openreplay/templates/configmap.yaml new file mode 100644 index 000000000..8189a3163 --- /dev/null +++ b/scripts/helmcharts/openreplay/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: openreplay-version + namespace: "{{ .Release.Namespace }}" + annotations: + "helm.sh/hook": post-install, post-upgrade + "helm.sh/hook-weight": "-6" # Higher precidence, so the first the config map will get created. +data: + version: {{ .Chart.AppVersion }} diff --git a/scripts/helmcharts/openreplay/templates/job.yaml b/scripts/helmcharts/openreplay/templates/job.yaml index a766880a1..426c7aafa 100644 --- a/scripts/helmcharts/openreplay/templates/job.yaml +++ b/scripts/helmcharts/openreplay/templates/job.yaml @@ -3,8 +3,8 @@ Don't have to trigger migration if there is no version change Don't have to trigger migration if skipMigration is set Have to trigger migration if forceMigration is set */}} -{{- $versionChange := and (eq .Values.fromVersion .Chart.AppVersion) (.Release.IsUpgrade) }} -{{- if or (not (or .Values.skipMigration $versionChange)) .Values.forceMigration }} +{{- $versionChange := (or .Values.deployment.argo (and (not (eq .Values.fromVersion .Chart.AppVersion)) .Release.IsUpgrade)) }} +{{- if or .Values.forceMigration (and (not .Values.skipMigration) $versionChange) }} --- apiVersion: v1 kind: ConfigMap @@ -99,6 +99,12 @@ spec: containers: - name: postgres env: + - name: OPENREPLAY_VERSION + valueFrom: + configMapKeyRef: + name: openreplay-version + key: version + optional: true - name: FORCE_MIGRATION value: "{{ .Values.forceMigration }}" - name: PREVIOUS_APP_VERSION @@ -145,6 +151,12 @@ spec: - name: minio image: bitnami/minio:2023.11.20 env: + - name: OPENREPLAY_VERSION + valueFrom: + configMapKeyRef: + name: openreplay-version + key: version + optional: true {{- range $key, $val := .Values.global.env }} - name: {{ $key }} value: '{{ $val }}' @@ -268,6 +280,12 @@ spec: - name: clickhouse image: clickhouse/clickhouse-server:22.12-alpine env: + - name: OPENREPLAY_VERSION + valueFrom: + configMapKeyRef: + name: openreplay-version + key: version + optional: true {{- range $key, $val := .Values.global.env }} - name: {{ $key }} value: '{{ $val }}' @@ -303,6 +321,12 @@ spec: - name: kafka image: bitnami/kafka:2.6.0-debian-10-r30 env: + - name: OPENREPLAY_VERSION + valueFrom: + configMapKeyRef: + name: openreplay-version + key: version + optional: true {{- range $key, $val := .Values.global.env }} - name: {{ $key }} value: '{{ $val }}' diff --git a/scripts/helmcharts/openreplay/values.yaml b/scripts/helmcharts/openreplay/values.yaml index a4273492c..ee391e8d2 100644 --- a/scripts/helmcharts/openreplay/values.yaml +++ b/scripts/helmcharts/openreplay/values.yaml @@ -5,6 +5,11 @@ migrationJob: migration: env: {} +deployment: + argo: false +forceMigration: false +skipMigration: false + redis: &redis tls: enabled: false