🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@bifos/nhncloud-cli

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bifos/nhncloud-cli - npm Package Compare versions

Comparing version
0.1.0
to
0.2.0
+1
-1
package.json
{
"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": [

@@ -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