harbor通过API删除镜像

#环境说明: 这里使用的harbor版本是2.0.2
  • Harbor API 相关的接口可以在Harbor首页左下方看到下图红框所示的位置点击查看

image

1. 列出镜像名字使用的API如下图

  • 输入需要查询的项目下仓库信息,先点击 Try it out填写信息, 然后点击 Execute生产url地址

image

  • 使用生成的url来列出镜像

image

# harbor api地址
harbor_url="https://$HOST/api/v2.0"

# 列出项目中仓库的镜像
# project_name 项目名
# repository_name 仓库名
${harbor_url}/projects/{project_name}/repositories/{repository_name}/artifacts   #GET方法获取镜像

# 此时的page在web UI上第一页显示的数量是10个,可以修改page_size的值为你的镜像总条数(例如1000)
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=10&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false"

# 修改后
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false"

列出仓库中的所有镜像后可以使用jq工具处理json格式 然后使用grep和awk取得镜像的digest的值
image

# 像这样就可以取得仓库中所有的镜像号了,然后再进行下一步
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false" | jq . | grep "digest" | awk -F '"' '{print $4}' > /tmp/digest.txt

2. 删除镜像使用的API如下图
image

# 根据镜像的distge删除镜像
/projects/{project_name}/repositories/{repository_name}/artifacts/{reference}
# 同上方式获取到url地址后就可以删除了
curl -k -u "admin:Harbor12345" -X DELETE "https://$HOST/api/v2.0/projects/project/repositories/name/artifacts/${digest}"

最后附上一个脚本文件

#!/bin/bash
#获取镜像号列表
curl -X GET "https://$HOST/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false" | jq . |grep "digest" | awk -F '"' '{print $4}' > /tmp/digest.txt

#设定需要保留的镜像号
TOTAL_NUN=$(cat /tmp/digest.txt |wc -l )
DELETE_NUN=$( echo  "${TOTAL_NUN}  - 50  "|bc  )
DELETE_IMAGES=$(tail -n ${DELETE_NUN} /tmp/digest.txt )

#开始删除
for DIGEST in ${DELETE_IMAGES}
do
	curl  -u "admin:Harbor12345" -X DELETE "https://$HOST/api/v2.0/projects/project/repositories/name/artifacts/${DIGEST}"
done

#如果想要并行执行, 将循环体放在{}里面即可, 不过可能会造成harbor出现504报错.
#若果有多个仓库需要删除,可以在外层再执行一个循环









posted @ 2021-12-02 16:51  少林寺驻峨眉山大神父  阅读(1148)  评论(8编辑  收藏  举报