💡 핵심 요약 (Executive Summary)
본 가이드는 bash harbor harbor api scripting 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
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