upgrade-scripts/pre-upgrade/one-time/MigrateRedisStorageToCeph.groovy (58 lines of code) (raw):

void call() { String redisCrName = "redis-sentinel" ArrayList redisPvc = sh(script: "oc -n ${NAMESPACE} get pvc -l app.kubernetes.io/name=redis-sentinel \ -o custom-columns=NAME:.metadata.name --no-headers", returnStdout: true).tokenize() String currentRedisStorageClass = sh(script: "oc -n ${NAMESPACE} get pvc ${redisPvc[0]} -o jsonpath='{.spec.storageClassName}'", returnStdout: true).trim() String platformStorageClass = sh(script: "helm get values registry-configuration -n ${NAMESPACE} | grep '^storageClass: ' | awk '{print \$2}'", returnStdout: true).trim() if (currentRedisStorageClass != platformStorageClass) { sh """ oc -n ${NAMESPACE} get pvc -l app.kubernetes.io/name=redis-sentinel -o json | jq 'del(.items[].metadata.resourceVersion,.items[].metadata.uid,.items[].metadata.managedFields, .items[].metadata.managedFields,.items[].status,.items[].metadata.creationTimestamp, .items[].metadata.annotations,.items[].spec.volumeMode,.items[].spec.volumeName)' | jq --arg storageClass "${platformStorageClass}" '.items[].spec.storageClassName=\$storageClass' > redisPvc.json oc -n ${NAMESPACE} delete redisfailover ${redisCrName} """ redisPvc.each { pvc -> sh """ jq --arg pvcName "${pvc}" '.items[] | select(.metadata.name==\$pvcName)' redisPvc.json | \ jq --arg pvcName "${pvc}-temp" '.metadata.name=\$pvcName' | \ oc apply -f - oc -n ${NAMESPACE} process -f ./resources/JobMigrateDataBetweenPvc.yaml \ -p NAMESPACE=${NAMESPACE} \ -p SRC_PVC=${pvc} \ -p DEST_PVC=${pvc}-temp | \ oc -n ${NAMESPACE} create -f - JOB_NAME="rsync-to-${pvc}-temp" while [[ `oc -n ${NAMESPACE} get job \${JOB_NAME} -o jsonpath='{.status.succeeded}'` != 1 ]]; do echo "Job \${JOB_NAME} is still running or didn't start yet" sleep 10 done oc -n ${NAMESPACE} delete job \${JOB_NAME} oc -n ${NAMESPACE} delete pvc ${pvc} jq --arg pvcName "${pvc}" '.items[] | select(.metadata.name==\$pvcName)' redisPvc.json | \ oc apply -f - oc -n ${NAMESPACE} process -f ./resources/JobMigrateDataBetweenPvc.yaml \ -p NAMESPACE=${NAMESPACE} \ -p SRC_PVC=${pvc}-temp \ -p DEST_PVC=${pvc} | \ oc -n ${NAMESPACE} create -f - JOB_NAME="rsync-to-${pvc}" while [[ `oc -n ${NAMESPACE} get job \${JOB_NAME} -o jsonpath='{.status.succeeded}'` != 1 ]]; do echo "Job \${JOB_NAME} is still running or didn't start yet" sleep 10 done oc -n ${NAMESPACE} delete job \${JOB_NAME} oc -n ${NAMESPACE} delete pvc ${pvc}-temp """ } sh "rm redis*.json" } } return this;