charts/osdu-developer-base/templates/storage-share-job.yaml (112 lines of code) (raw):

{{- if .Values.share.enabled -}} {{- range $index, $item := .Values.share.items }} apiVersion: batch/v1 kind: Job metadata: name: {{ $.Release.Name }}-share-{{ $index }} namespace: {{ $.Release.Namespace }} spec: ttlSecondsAfterFinished: 300 template: spec: serviceAccountName: workload-identity-sa volumes: - name: script configMap: name: storage-share-script defaultMode: 0500 - name: storage persistentVolumeClaim: claimName: {{ $item.pvc }} initContainers: - name: data-seed image: mcr.microsoft.com/cbl-mariner/base/core:2.0 command: ["/bin/sh"] args: - -c - | tdnf install -y curl tar zip && \ /script/init.sh volumeMounts: - name: script mountPath: "/script" - name: storage mountPath: "/share" env: - name: URL value: {{ $item.url | quote }} - name: SHARE value: {{ $item.name | quote }} - name: COMPRESS value: {{ $item.compress | default false | quote }} - name: FILE value: {{ $item.file | quote }} containers: - name: sleep image: istio/base command: ["/bin/sleep", "30"] volumeMounts: - name: script mountPath: "/script" restartPolicy: Never --- {{- end }} apiVersion: v1 kind: ConfigMap metadata: name: storage-share-script namespace: {{ .Release.Namespace }} data: init.sh: | #!/bin/bash set -e # Derive the filename from the URL url_basename=$(basename ${URL}) echo "Derived filename from URL: ${url_basename}" # Download the file using curl with retry mechanism echo "Downloading file from ${URL} to ${url_basename}" retry_count=0 max_retries=3 while [ $retry_count -lt $max_retries ]; do if curl -kso ${url_basename} ${URL}; then break else retry_count=$((retry_count + 1)) echo "Attempt $retry_count failed. Retrying in 5 seconds..." >&2 sleep 5 fi done if [ $retry_count -eq $max_retries ]; then echo "Error: Failed to download file from ${URL} after $max_retries attempts." >&2 exit 1 fi # Check if the URL indicates a tar.gz file if [[ ${URL} == *.tar.gz ]]; then echo "URL indicates a tar.gz archive. Extracting contents..." # Create a directory for extracted files mkdir -p extracted_files # Extract the tar.gz file tar -xzf ${url_basename} --strip-components=1 -C extracted_files if [[ ${compress} == "True" ]]; then echo "Creating zip of contents of ${FILE} and copying it to /share" # Remove the original downloaded tar file rm ${url_basename} # Create a new zip file with the desired name zip_filename="${url_basename%.tar.gz}.zip" # Save the current working directory original_dir=$(pwd) # Navigate to the extracted_files/${FILE} directory cd extracted_files/${FILE} # Create the zip from the contents without including the extracted_files/${FILE} path itself zip -r ${original_dir}/${zip_filename} * # Navigate back to the original directory cd ${original_dir} # Copy the zip file to the /share mounted volume cp ${zip_filename} /share/ echo "Zip file ${zip_filename} copied to /share." else echo "Copying extracted files to /share with pattern ${FILE}/**" SOURCE_DIR="extracted_files/${FILE}" TARGET_DIR="/share/${FILE}" cd "$SOURCE_DIR" find . -type f | while read -r file; do relative_path="${file#./}" dest_path="${TARGET_DIR}/${relative_path}" install -D "$file" "$dest_path" echo "Copied: $file -> $dest_path" done fi echo "Files from ${url_basename} copied to /share." else # Copy the file to the /share mounted volume echo "Copying file ${FILE} to /share" cp ${FILE} /share/ echo "File ${FILE} copied to /share." fi {{- end }}