Harbor REST API Scripting: Tag Cleanup

๐Ÿ’ก 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
"""

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *