#!/bin/bash
harborUsername='admin'
harborPassword='Harbor12345'
harborRegistry='registry.test.com'
harborBasicAuthToken=$(echo -n "${harborUsername}:${harborPassword}" | base64)
docker login --username ${harborUsername} --password ${harborPassword} ${harborRegistry}
rm -f dist/images.list
rm -f dist/charts.list
projs=`curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" "https://${harborRegistry}"'/api/projects?page=1&page_size=1000' | jq -r '.[] | "\(.project_id)=\(.name)"'`
for proj in ${projs[*]}; do
projId=`echo $proj|cut -d '=' -f 1`
projName=`echo $proj|cut -d '=' -f 2`
repos=`curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" "https://${harborRegistry}"'/api/repositories?page=1&page_size=1000&project_id='"${projId}" | jq -r '.[] | "\(.id)=\(.name)"'`
for repo in ${repos[*]}; do
repoId=`echo $repo|cut -d '=' -f 1`
repoName=`echo $repo|cut -d '=' -f 2`
tags=`curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" "https://${harborRegistry}"'/api/repositories/'"${repoName}"'/tags?detail=1' | jq -r '.[].name'`
for tag in ${tags[*]}; do
docker pull ${harborRegistry}/${repoName}:${tag}
docker tag ${harborRegistry}/${repoName}:${tag} ${repoName}:${tag}
mkdir -p $(dirname dist/${repoName})
docker save -o dist/${repoName}:${tag}.tar ${repoName}:${tag}
echo "${repoName}:${tag}" >> dist/images.list
done
done
charts=`curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" "https://${harborRegistry}"'/api/chartrepo/'"${projName}"'/charts' | jq -r '.[].name'`
for chart in ${charts[*]}; do
durls=`curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" "https://${harborRegistry}"'/api/chartrepo/'"${projName}"'/charts/'"${chart}" | jq -r '.[].urls[0]'`
for durl in ${durls[*]}; do
mkdir -p $(dirname dist/${projName}/${durl})
curl -s -k -H "Authorization: Basic ${harborBasicAuthToken}" -o dist/${projName}/${durl} "https://${harborRegistry}/chartrepo/${projName}/${durl}"
echo "${projName}/${durl}" >> dist/charts.list
done
done
done