@bifos/nhncloud-cli
Advanced tools
+1
-1
| { | ||
| "name": "@bifos/nhncloud-cli", | ||
| "version": "0.1.0", | ||
| "version": "0.2.0", | ||
| "description": "CLI tool for NHN Cloud services — AI agent & terminal friendly", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
+79
-1
@@ -20,3 +20,3 @@ # nhncloud-cli | ||
| - profile → UAK(id/secret) → logncrash appkey/secret 순으로 입력한다. | ||
| - profile → UAK(id/secret) → logncrash appkey/secret → iaas 자격증명 순으로 입력한다. | ||
| - 저장 전 연결 테스트를 자동으로 수행한다 (`--no-verify` 로 생략 가능). | ||
@@ -26,2 +26,3 @@ - CI/자동화는 flag 로 비대화형 설정이 가능하다. | ||
| ```bash | ||
| # UAK + logncrash 비대화형 설정 | ||
| nhncloud configure \ | ||
@@ -31,4 +32,18 @@ --uak-id <id> --uak-secret <secret> \ | ||
| --no-verify | ||
| # iaas (Compute) 비대화형 설정 — API 비밀번호는 env 권장 | ||
| NHNCLOUD_IAAS_PASSWORD=<api-password> nhncloud configure \ | ||
| --iaas-tenant-id <tenant-id> \ | ||
| --iaas-username <iam-username> \ | ||
| --iaas-region kr1 \ | ||
| --no-verify | ||
| ``` | ||
| > **iaas password 안내**: `--iaas-password` 에 입력하는 값은 NHN Cloud 콘솔 IAM 의 **API 비밀번호**입니다. | ||
| > 로그인 비밀번호와 다릅니다. | ||
| > IAM 사용자 상세 페이지 → "API 비밀번호 설정"에서 별도로 발급하세요. | ||
| > | ||
| > **iaas username 안내**: `--iaas-username` 은 NHN Cloud 계정 이메일 또는 IAM 계정 ID(사번)입니다. | ||
| > tenantId 와 비슷한 "API 사용자 ID"(UUID)가 아닙니다. | ||
| 저장 경로: `~/.nhncloud/credentials.json` (mode 0600), `~/.nhncloud/config.json`. | ||
@@ -135,2 +150,64 @@ | ||
| ### 인스턴스 (Instance) | ||
| `~/.nhncloud/credentials.json` 에 `iaas` 블록을 추가하거나 `nhncloud configure` 로 설정한다. | ||
| ```json | ||
| { | ||
| "version": 1, | ||
| "profiles": { | ||
| "default": { | ||
| "iaas": { | ||
| "tenantId": "<tenant-id>", | ||
| "username": "<iam-username>", | ||
| "password": "<api-password>", | ||
| "region": "kr1" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| ```bash | ||
| # 인스턴스 목록 조회 | ||
| nhncloud instance list | ||
| # 단일 인스턴스 상태 조회 | ||
| nhncloud instance get <instance-id> | ||
| # 인스턴스 생성 (즉시 반환, BUILD 상태) | ||
| nhncloud instance create \ | ||
| --name my-server \ | ||
| --flavor <flavor-id> \ | ||
| --image <image-id> \ | ||
| --network <network-uuid> | ||
| # 인스턴스 생성 + ACTIVE 대기 (IP 할당까지 폴링) | ||
| nhncloud instance create \ | ||
| --name my-server \ | ||
| --flavor <flavor-id> \ | ||
| --image <image-id> \ | ||
| --network <network-uuid> \ | ||
| --wait | ||
| # GPU(g2) 등 boot-from-volume 필수 flavor — --boot-volume-size 지정 | ||
| nhncloud instance create \ | ||
| --name gpu-server \ | ||
| --flavor <gpu-flavor-id> \ | ||
| --image <image-id> \ | ||
| --network <network-uuid> \ | ||
| --boot-volume-size 30 \ | ||
| --wait | ||
| # --quiet --wait: 첫 IP 한 줄만 stdout (CI 파이프용) | ||
| IP=$(nhncloud instance create --name ci-runner \ | ||
| --flavor <flavor-id> --image <image-id> --network <network-uuid> \ | ||
| --wait --quiet) | ||
| # 인스턴스 삭제 (confirm 생략) | ||
| nhncloud instance delete <instance-id> --yes | ||
| ``` | ||
| 지원 region: `kr1` / `kr2` / `kr3` / `jp1` (`--region` 으로 override 가능). | ||
| ## 개발 | ||
@@ -142,3 +219,4 @@ | ||
| pnpm tsc --noEmit # 타입 체크 | ||
| node dist/index.js instance --help | ||
| node dist/index.js logncrash search --help | ||
| ``` |
@@ -253,1 +253,118 @@ --- | ||
| | Deploy API 오류 / 봉투 실패 | 1 (API_ERROR) | | ||
| --- | ||
| ## instance — Compute 인스턴스 발급·조회·삭제 | ||
| `instance` 명령군은 OpenStack Nova v2 호환 Compute API 를 호출한다. | ||
| Keystone v2 토큰 인증을 사용하며 토큰은 만료 전까지 region 별로 캐시한다. | ||
| ### instance 설정 | ||
| `nhncloud configure` 대화형 마법사에서 "iaas 자격증명도 설정하시겠습니까?" 에 응답하거나, | ||
| flag 로 직접 입력한다. | ||
| ```bash | ||
| # 대화형 (권장) | ||
| nhncloud configure | ||
| # 비대화형 — API 비밀번호는 env 로 전달 (cmdline 노출 방지) | ||
| NHNCLOUD_IAAS_PASSWORD=<api-password> nhncloud configure \ | ||
| --iaas-tenant-id <tenant-id> \ | ||
| --iaas-username <iam-username> \ | ||
| --iaas-region kr1 \ | ||
| --no-verify | ||
| ``` | ||
| > **주의 (password)**: `--iaas-password` 에 입력하는 값은 NHN Cloud 콘솔 IAM 의 **API 비밀번호**입니다. | ||
| > NHN Cloud 로그인 비밀번호와 다릅니다. | ||
| > IAM 사용자 상세 페이지 → "API 비밀번호 설정"에서 별도로 발급합니다. | ||
| > | ||
| > **주의 (username)**: `--iaas-username` 은 NHN Cloud 계정 이메일 **또는 IAM 계정 ID(사번)** 입니다. | ||
| > tenantId 와 비슷한 32자리 hex "API 사용자 ID"(UUID)가 아닙니다 — 잘못 넣으면 `Could not find user` 인증 실패가 납니다. | ||
| 저장 위치: `~/.nhncloud/credentials.json` 의 `profiles.<profile>.iaas` 블록. | ||
| ```json | ||
| { | ||
| "version": 1, | ||
| "profiles": { | ||
| "default": { | ||
| "iaas": { | ||
| "tenantId": "<tenant-id>", | ||
| "username": "<iam-username>", | ||
| "password": "<api-password>", | ||
| "region": "kr1" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| ### 의도 → 커맨드 매핑 | ||
| | 의도 | 커맨드 | | ||
| |------|--------| | ||
| | 인스턴스 목록 조회 | `nhncloud instance list` | | ||
| | 특정 인스턴스 상태 조회 | `nhncloud instance get <id>` | | ||
| | 인스턴스 생성 (즉시 반환) | `nhncloud instance create --name <name> --flavor <id> --image <id> --network <uuid>` | | ||
| | 인스턴스 생성 + ACTIVE 대기 | `nhncloud instance create ... --wait` | | ||
| | GPU 인스턴스 생성 | `nhncloud instance create --flavor <gpu-flavor-id> --boot-volume-size <gb> ...` (GPU 는 boot-from-volume 필수) | | ||
| | 인스턴스 삭제 (confirm 없이) | `nhncloud instance delete <id> --yes` | | ||
| | 다른 region 사용 | `nhncloud instance list --region kr2` | | ||
| | 다른 profile 사용 | `nhncloud instance list --profile staging` | | ||
| ### instance create 옵션 | ||
| | 옵션 | 필수 | 설명 | | ||
| |------|:---:|------| | ||
| | `--name <name>` | 예 | 인스턴스 이름 | | ||
| | `--flavor <id>` | 예 | flavor ID (CPU/메모리 사양. GPU 발급 시 GPU flavor ID 지정) | | ||
| | `--image <id>` | 예 | 이미지 ID | | ||
| | `--network <uuid>` | 예 | 네트워크 UUID (반복 지정으로 여러 개 가능) | | ||
| | `--boot-volume-size <gb>` | 조건부 | boot-from-volume root 볼륨 크기(GB). **GPU(g2) 등 일부 flavor 는 필수** (없으면 `Missing Block Device Mapping` 발급 실패). 미지정 시 로컬 디스크 부팅 | | ||
| | `--key-name <name>` | 아니오 | 키페어 이름 | | ||
| | `--security-group <name>` | 아니오 | 보안 그룹 이름 (반복 지정) | | ||
| | `--ephemeral-disk-size <gb>` | 아니오 | 임시 디스크 크기(GB, NHN 확장) | | ||
| | `--protect` | 아니오 | 삭제 방지 설정 (NHN 확장) | | ||
| | `--wait` | 아니오 | ACTIVE 상태 + IP 할당까지 대기 | | ||
| | `--timeout <sec>` | 아니오 | wait 타임아웃 (초, 기본 300) | | ||
| | `--region <region>` | 아니오 | region override (kr1/kr2/kr3/jp1) | | ||
| | `--profile <name>` | 아니오 | 사용할 profile 이름 | | ||
| ### 체이닝 예시 | ||
| ```bash | ||
| # 1. 인스턴스 생성 후 ACTIVE + IP 대기 → IP 추출 → SSH 접속 | ||
| IP=$(nhncloud instance create \ | ||
| --name ci-runner \ | ||
| --flavor <flavor-id> \ | ||
| --image <image-id> \ | ||
| --network <network-uuid> \ | ||
| --wait --quiet) | ||
| ssh ubuntu@"$IP" "echo ready" | ||
| # 2. --wait --json 으로 전체 필드 취득 후 jq 로 IP 파싱 | ||
| nhncloud instance create \ | ||
| --name ci-runner \ | ||
| --flavor <flavor-id> \ | ||
| --image <image-id> \ | ||
| --network <network-uuid> \ | ||
| --wait --json | jq -r '.addresses | to_entries[0].value[0].addr' | ||
| # 3. 사용 후 삭제 (ephemeral CI 패턴) | ||
| nhncloud instance delete "$INSTANCE_ID" --yes | ||
| # 4. 목록에서 id 만 추출 | ||
| nhncloud instance list --quiet | ||
| ``` | ||
| ### instance 에러 코드 | ||
| | 상황 | exit code | | ||
| |------|-----------| | ||
| | iaas 자격증명 누락·불완전 | 4 (CONFIG_ERROR) | | ||
| | Keystone 인증 실패 (401/403) | 2 (AUTH_ERROR) | | ||
| | 미등록 region / 필수 옵션 누락 | 3 (PARAM_ERROR) | | ||
| | API 오류 / waitForActive 타임아웃 | 1 (API_ERROR) | | ||
| | 비대화형 delete 에서 --yes 미지정 | 3 (PARAM_ERROR) | |
Sorry, the diff of this file is too big to display
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
83950
57.73%1612
56.5%218
55.71%9
12.5%