Nettoyez automatiquement le script d'entrepôt de miroir de port
Veuillez lire les instructions avant de continuer. S'il y a trop de suppressions, nous ne sommes pas responsables.
Un problème est survenu lors de la suppression de la version trouvée sur Internet et certaines modifications ont été apportées.
Les images miroir ici sont toutes construites selon l'ordre normal des nombres. Par exemple
v:1.0.1
v:1.0.2
v:1.0.3
v:1.0.4
OLD_VERSION_NUM设置为3的话 会把v:1.0.1删除。只保留后3个。
Jq doit être installé avant l'exécution
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install jq -y
coquille(Doit être placé sur l'hôte du port pour exécution)
#!/bin/bash
set -e
HARBOR_URL=harbor.test.com
HARBOR_PASSWD=123456
#最大保留镜像个数。超过后的删除。
OLD_VERSION_NUM=20
function get_repos_list(){
repos_list=$(curl -s -k -u admin:${
HARBOR_PASSWD} https://${
HARBOR_URL}/api/projects?page=1&page_size=50)
mkdir -p $PWD/reposList
echo "${repos_list}" | jq '.[]' | jq -r '.project_id' > $PWD/reposList/reposList.txt
}
function get_images_list(){
mkdir -p $PWD/imagesList
for repo in $(cat $PWD/reposList/reposList.txt);do
images_list=$(curl -s -k -u admin:${
HARBOR_PASSWD} https://${
HARBOR_URL}/api/repositories?project_id=${
repo})
echo "${images_list}" | jq '.[]' | jq -r '.name' > $PWD/imagesList/${repo}.txt
done
}
function delete_images(){
htmlinfo=$(curl -s -k -u admin:${
HARBOR_PASSWD} https://${
HARBOR_URL}/api/repositories/$1/tags)
tags=$(echo "${htmlinfo}" | jq ".[${index}]" | jq -r '.name')
for tag in `echo ${
tags} | awk 'BEGIN{i=1}{gsub(/ /,"\n");i++;print}' | awk -F. '{print $NF}' | sort -nr | sed "1,${OLD_VERSION_NUM}d"`;do
echo "images=$1 ************************** tag= v1.0.${tag}"
curl -s -k -u admin:${HARBOR_PASSWD} -X DELETE https://${HARBOR_URL}/api/repositories/$1/tags/v1.0.${tag}
done
}
function clean_registry(){
image_name=$(docker ps | grep registry | grep photon | awk -F " " '{print $2}')
docker run -it --name gc --rm --volumes-from registry ${image_name} garbage-collect /etc/registry/config.yml
}
function entrance(){
get_repos_list
get_images_list
for repo in $(cat $PWD/reposList/reposList.txt);do
for images in $(cat $PWD/imagesList/${
repo}.txt); do
delete_images ${images}
done
done
clean_registry
}
entrance