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報錯.
#若果有多個倉庫需要刪除,可以在外層再執行一個循環










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM