bucket-replication/templates/configmap.yaml (65 lines of code) (raw):
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "bucket-replication.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "bucket-replication.labels" . | nindent 4 }}
data:
bucket-replication.sh: |
#!/usr/bin/env bash
rook_s3_endpoint=$(oc get cephobjectstore/mdtuddm -n openshift-storage -o=jsonpath='{.status.info.endpoint}')
bucket=$(oc get objectbucketclaim/"${OBJECT_BUCKET_CLAIM}" -n ${REGISTRY_NAMESPACE} -o=jsonpath="{.spec.bucketName}")
access_key_rook=$(oc get secret/"${OBJECT_BUCKET_CLAIM}" -n "${REGISTRY_NAMESPACE}" -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d)
access_secret_key_rook=$(oc get secret/"${OBJECT_BUCKET_CLAIM}" -n "${REGISTRY_NAMESPACE}" -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)
mkdir -p ~/.config/rclone
echo "
["${BACKUP_BUCKET}"]
type = s3
provider = Other
endpoint = ${S3_ENDPOINT}
env_auth = true
region = eu-central-1
acl = private
bucket_acl = private
[rook]
type = s3
provider = Ceph
env_auth = false
access_key_id = ${access_key_rook}
secret_access_key = ${access_secret_key_rook}
endpoint = ${rook_s3_endpoint}
acl = bucket-owner-full-control
bucket_acl = authenticated-read" > ~/.config/rclone/rclone.conf
# append only bucket - data bucket strategy (by label) - copy / other sync
{{- if eq .Values.registryBackup.obc.action "replication" }}
rclone_command="rclone copy -P --no-traverse --metadata"
if [[ -z $(rclone lsd ${BACKUP_BUCKET}:${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE} | grep ${OBJECT_BUCKET_CLAIM}) ]]; then
echo "[INFO] Destination folder empty, copy full bucket to destination"
else
echo "[INFO] Destination folder exists, copy bucket data for ${MAX_AGE}"
rclone_command="${rclone_command} --max-age ${MAX_AGE}"
fi
function replication() {
set +o pipefail
$rclone_command rook:${bucket} ${BACKUP_BUCKET}:/${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE}/${OBJECT_BUCKET_CLAIM}/ -v > /tmp/rcloneout 2> /tmp/rcloneerror
return 0
}
function error_response(){
return 1
}
replication
if grep -q 'failed to open source object: NoSuchKey' /tmp/rcloneerror;then
echo "[WARN] False positive error with NoSuchKey. Ignore"
elif [ -s /tmp/rcloneout ];then
echo "[INFO] Replication completed with no errors."
else
if [ ! -z ${DEBUG} ]; then
echo "[ERROR][DEBUG]Debug flag set to true"
cat /tmp/rcloneerror
else
echo "[ERROR]Please run job in debug mode. Add to enviromnet variable DEBUG with value "true" to return logs to stout"
fi
error_response
fi
{{- else }}
rclone -M -v sync ${BACKUP_BUCKET}:/${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE}/${OBJECT_BUCKET_CLAIM} rook:${bucket}
{{- end }}