feat(cli): 로컬 dev 클러스터를 콘솔 클러스터 목록에 등록(내 로컬/내 원격) — 0.15.0
dev up/deploy 가 배포토큰으로 콘솔에 로컬 클러스터를 best-effort 메타 등록/heartbeat, dev down 이 해제. 로그인 없으면 조용히 스킵(오프라인 dev 불변식). 콘솔 사이드바가 '내 로컬 클러스터'/'내 원격 클러스터'로 분리. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
29
bin/yakcloud
29
bin/yakcloud
@ -16,7 +16,7 @@ set -uo pipefail # -e 미사용: 'test && action' 관용구가 값 없을 때
|
||||
|
||||
REPO="${YAKCLOUD_STARTER_REPO:-https://gitea.yakenator.io/yakenator/yakcloud-starter}"
|
||||
BRANCH="${YAKCLOUD_STARTER_BRANCH:-main}"
|
||||
VERSION="0.14.0"
|
||||
VERSION="0.15.0"
|
||||
# 로컬 개발 클러스터(kind) — 개발 후 운영까지 '직선 배포'의 dev 구간.
|
||||
DEV_CTX="${YAK_DEV_CONTEXT:-kind-yak-dev}"
|
||||
DEV_CLUSTER="${YAK_DEV_CLUSTER:-yak-dev}"
|
||||
@ -429,9 +429,34 @@ EOF
|
||||
kubectl --context "$DEV_CTX" -n ingress-nginx rollout status deploy/ingress-nginx-controller --timeout=180s >/dev/null 2>&1 \
|
||||
|| warn_line "ingress 컨트롤러 준비 지연 — 잠시 후 'yakcloud dev deploy'."
|
||||
echo "✓ 로컬 dev 클러스터 준비 ($DEV_CTX). 다음: yakcloud dev deploy"
|
||||
_dev_register
|
||||
}
|
||||
warn_line() { echo " ⚠ $*" >&2; }
|
||||
|
||||
# 콘솔 클러스터 목록에 이 로컬 클러스터를 메타 등록 — 머신 호스트명 기준(머신당 1개, 프로젝트는 네임스페이스).
|
||||
_local_reg_name() {
|
||||
local h; h="$(hostname -s 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9-' '-' | sed 's/^-*//; s/-*$//')"
|
||||
echo "${h:-local-dev}"
|
||||
}
|
||||
# best-effort 등록/heartbeat — 로그인(URL+토큰) 없으면 조용히 스킵(오프라인 dev 불변식 유지).
|
||||
_dev_register() {
|
||||
{ [ -n "${YAKCLOUD_URL:-}" ] && [ -n "${YAKCLOUD_TOKEN:-}" ]; } || return 0
|
||||
local name; name="$(_local_reg_name)"
|
||||
curl -fsS -m 6 -X POST "${YAKCLOUD_URL%/}/api/v1/clusters/local" \
|
||||
-H "Authorization: Bearer $YAKCLOUD_TOKEN" -H 'content-type: application/json' \
|
||||
-d "{\"name\":\"$name\",\"displayName\":\"로컬 개발 (kind)\"}" >/dev/null 2>&1 \
|
||||
&& info "콘솔 클러스터 목록에 로컬 '$name' 등록/갱신" || true
|
||||
return 0
|
||||
}
|
||||
_dev_deregister() {
|
||||
{ [ -n "${YAKCLOUD_URL:-}" ] && [ -n "${YAKCLOUD_TOKEN:-}" ]; } || return 0
|
||||
local name; name="$(_local_reg_name)"
|
||||
curl -fsS -m 6 -X DELETE "${YAKCLOUD_URL%/}/api/v1/clusters/local/$name" \
|
||||
-H "Authorization: Bearer $YAKCLOUD_TOKEN" >/dev/null 2>&1 \
|
||||
&& info "콘솔 클러스터 목록에서 로컬 '$name' 해제" || true
|
||||
return 0
|
||||
}
|
||||
|
||||
cmd_dev() {
|
||||
local sub="${1:-}"; [ "$#" -gt 0 ] && shift
|
||||
case "$sub" in
|
||||
@ -445,12 +470,14 @@ cmd_dev() {
|
||||
local pysub="$sub"; [ "$sub" = clean ] && pysub="down"
|
||||
YAK_DEV_CONTEXT="$DEV_CTX" YAK_DEV_CLUSTER="$DEV_CLUSTER" YAK_DEV_RUNTIME="${rt:-docker}" \
|
||||
TAG="${tag:-${TAG:-dev}}" python3 scripts/yakcloud_dev.py "$pysub" yakcloud.yaml
|
||||
[ "$sub" = deploy ] && _dev_register || true
|
||||
;;
|
||||
down)
|
||||
command -v kind >/dev/null 2>&1 || die "kind 필요"
|
||||
local rt kenv=""; rt="$(_dev_runtime)"; [ "$rt" = podman ] && kenv="KIND_EXPERIMENTAL_PROVIDER=podman"
|
||||
info "kind 클러스터 '$DEV_CLUSTER' 삭제…"
|
||||
env $kenv kind delete cluster --name "$DEV_CLUSTER" && echo "✓ 삭제 완료"
|
||||
_dev_deregister
|
||||
;;
|
||||
*) echo "yakcloud dev <up|deploy [tag]|status|clean|down>"; exit 1 ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user