6.2 KiB
6.2 KiB
description, argument-hint, allowed-tools
| description | argument-hint | allowed-tools |
|---|---|---|
| YakCloud 배포 CLI를 Claude Code에서 구동 — 스캐폴딩·배포·데이터소스·도메인 (/yakcloud <args>) | project init <name> | project deploy | datasource ls | domain <fqdn> | info | check | Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion |
사용자가 /yakcloud $ARGUMENTS 로 호출했다. 너는 yakcloud CLI(단일 진실원천)를 현재 작업 디렉터리에서
구동하는 드라이버다. 터미널이 아니라 Claude Code 안이므로, TTY가 필요한 대화형 흐름은 네가 값을 모아
비대화형으로 대신 실행한다.
0) 준비 (매 호출 첫 단계)
command -v yakcloud확인. 없으면 설치:curl -fsSL https://gitea.yakenator.io/yakenator/yakcloud-starter/raw/branch/main/install.sh | sh이후에도 PATH에 없으면$HOME/.local/bin/yakcloud절대경로로 실행.알 수 없는 명령/구버전 신호가 보이면yakcloud upgrade로 최신화 후 재시도.
1) 디스패치 — $ARGUMENTS
- 비어 있거나
help→yakcloud help실행 결과 + 한 줄 사용 요약. project init [name]→ §2 스캐폴딩(마법사 대체).login→ 비밀 입력이라 여기서 실행하지 말고, 터미널에서yakcloud login하라고 한 줄 안내. (사용자가 값을 직접 주면YAKCLOUD_URL=… YAKCLOUD_TOKEN=… GITEA_USER=… GITEA_TOKEN=… yakcloud config로 저장하되 값은 화면에 출력 금지.)cluster create <name> …→ 배포토큰으로 클러스터 프로비저닝(5~8분 대기). 실행 전 무엇을(템플릿·노드 수) 만드는지 한 줄 알리고 진행.cluster ls= 목록.dev up|deploy|status|clean|down→ 로컬 kind 개발 클러스터.dev up(최초 1회, kind+인그레스) →dev deploy(소스+워크로드를 로컬에서 관리형과 동일한 바인딩 env로; 콘솔/CI 불필요).$ARGUMENTS실행 후 출력 그대로 + 접속 URL(http://<project>.dev.localhost/) 안내.dev down(kind 삭제)은 실행 전 한 줄 알리고 진행.project promote [vX.Y.Z] [--to val|prod]→ 그 이미지를 재빌드 없이 상위 환경으로 승격(개발→검증→운영, 기본 --to prod). 파괴적/외부노출이므로 실행 전 무엇을(어느 태그를 어느 환경 클러스터로) 하는지 한 줄 알리고 진행.- 그 외 전부(
project deploy|info|check|update,datasource ls|options,domain,scale,set,env,source,bind,unbind,config,upgrade) →yakcloud $ARGUMENTS를 실행하고 출력을 그대로 보여준 뒤, 필요할 때만 한 줄로 해석. 배포/승격/삭제성(deploy·promote·source rm·unbind·domain)은 실행 전 무엇을 하는지 한 줄 알리고 진행. - 로컬 개발 =
yakcloud dev(로컬 kind), 검증·운영 = 관리형 yakcloud 클러스터. 같은 매니페스트·같은 바인딩 계약으로 직선. 매니페스트 = base(공유 정체) +environments.{dev,val,prod}(차이만; val=검증계, 선택). requires 는 논리name매칭으로 병합되고, 오버레이는 base 하고만 병합된다(dev↔val↔prod 끼리 상속 없음). 잘못 짜면 배포 전 친절한 검증 오류가 뜬다.
2) project init — 마법사 대체 (핵심)
터미널 마법사는 TTY가 없으면 안 뜬다. 네가 대신한다:
yakcloud project init <name> -y로 비대화형 스캐폴딩(기본 매니페스트 생성;bin/·install.sh잔재 없음).$ARGUMENTS/대화 맥락에 이미 있는 값은 재질문 금지. 부족한 핵심값만AskUserQuestion으로 모은다: 개발 클러스터, (검증 클러스터·선택), 운영 클러스터(같으면 하나로), 앱 포트, 노출 경로(기본/), CPU/메모리, 필요한 데이터소스(있으면), 운영 도메인(있으면). → 매니페스트environments.dev.cluster/ (environments.val.cluster) /environments.prod.cluster/environments.prod.domains에 반영. 참고:requires[].name은 binds·오버레이 매칭용 논리 이름(불변)이고, 실제 클러스터 소스 이름은clusterName(기본=name) — 로컬↔운영 소스명이 다를 때environments.<env>오버레이에서clusterName만 바꿔 매핑한다(binds 는 항상 논리 name 참조).- 모은 값을 CLI로 반영:
yakcloud set <wl> --port … --cpu … --mem … --path …- 소스(운영은 3-모드 중 결정): local(인클러스터 신규)=
yakcloud source add <name> <type> [plan], shared(공유·datasource options로 sharedAvailable 확인 후 백엔드가 클러스터별 격리 DB 민팅)=yakcloud source add <name> <type> --shared, remote(기존 외부·접속정보는 매니페스트/git 에 넣지 말고 콘솔/API 로 등록) +yakcloud bind <wl> <name> <alias>. 타입 제약: oracle=remote 전용, redis·minio=shared 없음, 나머지 6종=3모드 전부. 로컬 dev 는 도커로 논리 이름 그대로 떠서 결정 불필요(이 조회/결정은 운영·검증용). - 도메인:
yakcloud domain <fqdn> <wl> - 이용 가능한 클러스터 소스를 먼저 보고 싶으면
yakcloud datasource ls [--env prod|val] [--cluster <id>] [--json]— 대상 환경/클러스터의 기존 소스 목록(에이전트용--json). - 운영/검증에서 소스 모드를 정하기 전엔
yakcloud datasource options <type> [--env prod|val] [--cluster <id>] [--json]— 타입별 지원모드(local/remote/shared) + 이 배포의 공유 가용성(sharedAvailable) + 기존 소스(existing) + 조회실패 구분(existingError)을 확인.
- 자격 미설정이면(
yakcloud config로 확인) 터미널yakcloud login안내. - 다음 단계(개발 →
yakcloud project deploy) 를 요약.
규약
- 전역 명령이지만 대상은 현재 프로젝트(현지
yakcloud.yaml). ctl 계열(set/env/source/bind/domain/info)은 프로젝트 폴더에서만 동작 — 아니면 먼저yakcloud project init안내.datasource ls는 클러스터만 있으면 조회 가능. - 자격/비밀 화면 출력 금지. 배포토큰(
yakd_…)·Gitea 토큰은 CLI의 OS 키체인 저장에 위임. - 실패 시 종료코드·stderr 를 그대로 + 원인이 자명하면 한 줄 + 다음 행동 제시.