Harbor作为一个开源的用于存储和分发容器镜像的企业级Registry服务器(企业级容器镜像仓库),提供了强大的容器镜像管理功能,支持多Harbor仓库进行复制和同步,还能通过集成第三方工具进行容器镜像分布式预发布,是企业自建私有容器镜像仓库的不二选择。
随着企业项目的变化,代码工程的变多,Harbor仓库中的容器镜像库也越来越多,某天领导说让统计一下公司Harbor仓库中都有哪些镜像仓库,对于没有用仓库需要删除掉,释放服务器的存储资源。接到任务的大胖兴匆匆的登录了Harbor仓库的WEB页面进行统计,但是很快大胖就麻瓜了,公司的Harbor根据每个项目都创建应用的项目仓库,每一个项目中的仓库有多有少,多的好几十个镜像库,领导还要统计版本号,这下大胖彻底崩溃了。这时路过的老李问大胖为啥一脸的生无可恋的模样,得知原委后,老李拍拍大胖的肩膀说给我半小时,半小时后老李给大胖发来了一个Shell脚本,然后告诉大胖这样、这样、再这样,然后回车执行,大胖看着控制台输出的镜像库完整地址流下了激动的泪水,又可以摸鱼一整天了。
废话不多说,大胖这就把老李的脚本交给大家
代码语言:shell复制#!/bin/bash
# 使用时需先改以下3个变量参数,如果Harbor未启用https,需要去除curl中的-k参数
HARBOR_URL="https://10.x.x.x"
USERNAME="xxx"
PASSWORD="xxx"
# API endpoint to get all images
imges_head=$(echo "$HARBOR_URL"|awk -F // '{print $2}' )
projects_endpoint="$HARBOR_URL/api/v2.0/projects"
projects=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $projects_endpoint |jq -r '.[].name')
for project in $projects;do
repo_count_endpoint="$HARBOR_URL/api/v2.0/projects?name=$project"
repo_count=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $repo_count_endpoint |jq -r '.[].repo_count')
pages=$(expr $repo_count / 10 1)
for ((i=1;i<=$pages;i ));do
images_endpoint="$HARBOR_URL/api/v2.0/projects/$project/repositories?page_size=10&page=$i"
repos=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $images_endpoint | jq -r '.[].name' |awk -F / '{print $2}')
for repo in $repos;do
tag_count_url="$HARBOR_URL/api/v2.0/projects/$project/repositories/$repo"
tag_count=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $tag_count_url |jq '.artifact_count')
pages1=$(expr $tag_count / 10 1)
for ((j=1;j<=$pages1;j ));do
tags_endpoint="$HARBOR_URL/api/v2.0/projects/$project/repositories/$repo/artifacts?page_size=10&page=$j"
tags=$(curl -u $USERNAME:$PASSWORD -skX 'GET' $tags_endpoint |jq -r '.[].tags' |jq -r '.[].name')
for tag in $tags;do
echo "$imges_head/$project/$repo:$tag"
done
done
done
done
done