๐ก Harbor REST API Scripting: Tag Cleanup โ Executive Summary
Technical architectural analysis, practical configuration manifests, and deployment instructions for Harbor REST API Scripting: Tag Cleanup.
Creating
Create Project
bash
#!/bin/bash
ns=$1
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
curl -u "admin:Cloud000@" \
--cacert $SCRIPT_DIR/../ca.crt \
-XPOST "https://harbor.Enterprise Cloud.hanacloudia.com/api/v2.0/projects" \
-H "Content-Type: application/json" \
-d '{
"project_name": "'"$ns"'",
"public": true,
"storage_limit": -1,
"metadata": {
"public": "true",
"auto_scan": "true",
"reuse_sys_cve_allowlist": "true"
}
}'
Deleting
Remove Projects
bash
#!/bin/bash
url=
id=
pw=
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# ํด๋น ํ๋ก์ ํธ ๋ด ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํฉ๋๋ค.
projects="apache keycloak management mariadb rabbitmq vault"
# ํ๋ก์ ํธ ๋ฃจํ
for project in $projects
do
# ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํ
repositorys=$(curl -s --cacert $SCRIPT_DIR/../ca.crt -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/" | jq '.[].name' -r | sed "s/${project}\///g")
for repository in $repositorys
do
# ์ด๋ฏธ์ง ๋ฃจํ: ์ด๋ฏธ์ง ์ญ์ ์์ฒญ
digests=$(curl -s --cacert $SCRIPT_DIR/../ca.crt -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/${repository}/artifacts" | jq '.[].digest' -r)
for digest in $digests
do
echo "delete {{${project}/${repository}:${digest}}}"
curl -XDELETE --cacert $SCRIPT_DIR/../ca.crt -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/${repository}/artifacts/${digest}"
done
curl -XDELETE --cacert $SCRIPT_DIR/../ca.crt -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/${repository}"
done
curl -XDELETE --cacert $SCRIPT_DIR/../ca.crt -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}"
done
Manual GC
bash
#!/bin/bash
url=
id=
pw=
# ํด๋น ํ๋ก์ ํธ ๋ด ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํฉ๋๋ค.
projects="stg-portal dev-portal"
# ํ๋ก์ ํธ ๋ฃจํ
for project in $projects
do
# ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํ
repositorys=$(curl -s -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/" | jq '.[].name' -r | sed "s/${project}\///g")
for repository in $repositorys
do
# ์ด๋ฏธ์ง ๋ฃจํ: ์ด๋ฏธ์ง ์ญ์ ์์ฒญ
digests=$(curl -s -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/${repository}/artifacts" | jq '.[].digest' -r)
for digest in $digests
do
echo "delete {{${project}/${repository}:${digest}}}"
curl -XDELETE -u "${id}:${pw}" "${url}/api/v2.0/projects/${project}/repositories/${repository}/artifacts/${digest}"
done
done
done
# gc ์คํ
curl -s -u "${id}:${pw}" -XPOST \
"${url}/api/v2.0/system/gc/schedule" \
-H "Content-Type: application/json" \
-d '{"schedule":{"type":"Manual"}}'
# gc ์ํ: "job_status": "finished" ์ํ๊ฐ ๋๋ฉด ๋ณผ๋ฅจ ํ๋ณด๋ฉ๋๋ค.
curl -s -u "${id}:${pw}" \
"${url}/api/v2.0/system/gc"
# ์ฌ์ฉ์ ํธ์๊ธฐ๋ฅ
echo """
system: job_status=finished ์ํ๊ฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ธ์.
curl -s -u ${id}:${pw} \
${url}/api/v2.0/system/gc
"""




Leave a Reply