@bifos/nhncloud-cli 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +276 -2
- package/dist/index.js +2916 -302
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +329 -2
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# nhncloud-cli
|
|
2
2
|
|
|
3
3
|
NHN Cloud 서비스를 AWS CLI 방식으로 호출하는 통합 CLI.
|
|
4
|
-
현재 `logncrash search` (Log & Crash 로그
|
|
4
|
+
현재 `configure`, `logncrash search/send` (Log & Crash 로그 검색·전송), `deploy` (배포·바이너리 조회·업로드·다운로드), `instance` (Compute 인스턴스 목록·발급·전원 제어·타입 변경·키페어 관리·이미지·가용성 영역 조회·볼륨 연결 포함), `network` (VPC·서브넷 목록 조회), `volume` (Block Storage 볼륨 목록·조회·생성), `ncr` (NHN Container Registry 레지스트리 목록·조회·이미지 목록·태그 목록) 명령을 지원한다.
|
|
5
5
|
|
|
6
6
|
## 설치
|
|
7
7
|
|
|
@@ -17,7 +17,7 @@ npm install -g @bifos/nhncloud-cli
|
|
|
17
17
|
nhncloud configure
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
- profile → UAK(id/secret) → logncrash appkey/secret → iaas 자격증명 순으로 입력한다.
|
|
20
|
+
- profile → UAK(id/secret) → logncrash appkey/secret → iaas 자격증명 → ncr appkey 순으로 입력한다.
|
|
21
21
|
- 저장 전 연결 테스트를 자동으로 수행한다 (`--no-verify` 로 생략 가능).
|
|
22
22
|
- CI/자동화는 flag 로 비대화형 설정이 가능하다.
|
|
23
23
|
|
|
@@ -88,6 +88,24 @@ nhncloud deploy server-groups my-service
|
|
|
88
88
|
|
|
89
89
|
# 배포 이력 조회
|
|
90
90
|
nhncloud deploy histories my-service
|
|
91
|
+
|
|
92
|
+
# 바이너리 그룹 목록 — 그룹 key 확인
|
|
93
|
+
nhncloud deploy binary-groups my-service
|
|
94
|
+
|
|
95
|
+
# 위에서 확인한 key 로 바이너리 목록 조회
|
|
96
|
+
nhncloud deploy binaries my-service --binary-group <key>
|
|
97
|
+
|
|
98
|
+
# 업로드 최신순 정렬 + 전체 필드는 --json
|
|
99
|
+
nhncloud deploy binaries my-service --binary-group <key> --sort-key UPLOAD_DATE --sort-direction DESC --json
|
|
100
|
+
|
|
101
|
+
# 바이너리 업로드 — binary-groups 로 확인한 그룹 key 에 파일 올리기
|
|
102
|
+
nhncloud deploy upload <target> --file ./build/app.jar --binary-group <key> --description "release build"
|
|
103
|
+
|
|
104
|
+
# 업로드 응답의 binaryKey 만 필요하면 --quiet
|
|
105
|
+
nhncloud deploy upload <target> --file ./build/app.jar --binary-group <key> --quiet
|
|
106
|
+
|
|
107
|
+
# 바이너리 다운로드 — 파일로 저장 (기본 덮어쓰기 거부, --force 로 강제)
|
|
108
|
+
nhncloud deploy download <target> --binary-group <key> --binary-key <binary-key> -o ./app.jar
|
|
91
109
|
```
|
|
92
110
|
|
|
93
111
|
### 로그 검색
|
|
@@ -103,6 +121,56 @@ nhncloud logncrash search \
|
|
|
103
121
|
시간은 상대시간 (`1h` / `30m` / `2d` / `now`) 또는 ISO8601 (`2026-05-01T00:00:00+09:00`) 로 입력한다.
|
|
104
122
|
API 제약상 검색 시작은 최근 90일 이내, 검색 범위는 31일 이하여야 한다 (초과 시 입력 오류로 거절).
|
|
105
123
|
|
|
124
|
+
### 로그 대량 추출 (export)
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 검색 결과 전체를 파일로 추출 (JSON Lines, scroll 순회)
|
|
128
|
+
nhncloud logncrash export \
|
|
129
|
+
--query 'logType:"ERROR"' \
|
|
130
|
+
--from 1h --to now \
|
|
131
|
+
--output errors.jsonl
|
|
132
|
+
|
|
133
|
+
# JSON 배열 형식으로 추출
|
|
134
|
+
nhncloud logncrash export --query 'logType:"ERROR"' --from 1h --to now \
|
|
135
|
+
--output errors.json --format json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
단발 검색(`search`)과 달리 scroll API 로 전체 결과(최대 10만 건)를 순회해 파일로 저장한다.
|
|
139
|
+
진행 상황은 stderr, 데이터는 파일에만 기록된다(stdout 비움).
|
|
140
|
+
scrollKey 유효기간은 1분이므로 데이터가 많을 때는 `--size` 를 키워 페이지 수를 줄이는 것을 권장한다.
|
|
141
|
+
시간 범위 제한은 search 와 동일(90일 이내·31일 이하).
|
|
142
|
+
|
|
143
|
+
#### export 옵션
|
|
144
|
+
|
|
145
|
+
| 옵션 | 필수 | 설명 |
|
|
146
|
+
|------|:---:|------|
|
|
147
|
+
| `--query <lucene>` | 예 | Lucene 질의 문자열 |
|
|
148
|
+
| `--from <time>` | 예 | 검색 시작 (ISO8601 또는 상대시간 `1h`/`30m`/`2d`/`now`) |
|
|
149
|
+
| `--to <time>` | 예 | 검색 끝 |
|
|
150
|
+
| `--output <file>` | 예 | 출력 파일 경로 |
|
|
151
|
+
| `--format <fmt>` | 아니오 | `jsonl`(기본, 한 줄당 한 로그) 또는 `json`(배열) |
|
|
152
|
+
| `--size <n>` | 아니오 | scroll pageSize — 범위 10~100, 기본 100 |
|
|
153
|
+
| `--force` | 아니오 | 출력 파일이 있으면 덮어쓴다 (기본 거부) |
|
|
154
|
+
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
155
|
+
|
|
156
|
+
### 로그 전송
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 로그 한 건 전송 — 본문 직접
|
|
160
|
+
nhncloud logncrash send --body "결제 완료" --level INFO
|
|
161
|
+
|
|
162
|
+
# 파일에서 본문 읽어 전송
|
|
163
|
+
nhncloud logncrash send --file ./error.log --level ERROR
|
|
164
|
+
|
|
165
|
+
# 파이프(stdin)로 전송
|
|
166
|
+
echo "배치 작업 종료" | nhncloud logncrash send --level INFO
|
|
167
|
+
|
|
168
|
+
# 프로젝트 버전·소스 지정
|
|
169
|
+
nhncloud logncrash send --body "deploy 시작" --app-version 2.3.0 --source batch
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
> logncrash send 는 검색과 다른 collector 로 전송하며 appkey 만 사용한다 (secret 불요). 단일 로그 본문은 8MB 까지.
|
|
173
|
+
|
|
106
174
|
### 출력 모드
|
|
107
175
|
|
|
108
176
|
| 모드 | 옵션 | 용도 |
|
|
@@ -168,6 +236,33 @@ nhncloud logncrash search --query '*' --from 1d --to now --json | jq '.totalItem
|
|
|
168
236
|
# 인스턴스 목록 조회
|
|
169
237
|
nhncloud instance list
|
|
170
238
|
|
|
239
|
+
# 이미지 목록 (create --image <id> 에 넣을 image id 확인)
|
|
240
|
+
nhncloud instance images
|
|
241
|
+
|
|
242
|
+
# public 이미지만, 전체 필드 JSON
|
|
243
|
+
nhncloud instance images --visibility public --json
|
|
244
|
+
|
|
245
|
+
# 페이지네이션 — 다음 페이지
|
|
246
|
+
nhncloud instance images --limit 20 --marker <last-image-id>
|
|
247
|
+
|
|
248
|
+
# 인스턴스 타입(flavor) 목록 — id·name 만
|
|
249
|
+
nhncloud instance flavors
|
|
250
|
+
|
|
251
|
+
# 타입 상세 — vcpus·ram·disk 포함 (테이블은 핵심 5컬럼)
|
|
252
|
+
nhncloud instance flavors --detail
|
|
253
|
+
|
|
254
|
+
# 전체 필드(is_public·extra_specs 등)는 --json 으로
|
|
255
|
+
nhncloud instance flavors --detail --json
|
|
256
|
+
|
|
257
|
+
# RAM 8GB 이상 타입만 필터
|
|
258
|
+
nhncloud instance flavors --detail --min-ram 8192
|
|
259
|
+
|
|
260
|
+
# 가용성 영역(availability zone) 목록 (영역명·가용 여부)
|
|
261
|
+
nhncloud instance availability-zones
|
|
262
|
+
|
|
263
|
+
# 전체 응답(zoneState 등)은 --json 으로
|
|
264
|
+
nhncloud instance availability-zones --json
|
|
265
|
+
|
|
171
266
|
# 단일 인스턴스 상태 조회
|
|
172
267
|
nhncloud instance get <instance-id>
|
|
173
268
|
|
|
@@ -212,10 +307,188 @@ IP=$(nhncloud instance create --name ci-runner \
|
|
|
212
307
|
|
|
213
308
|
# 인스턴스 삭제 (confirm 생략)
|
|
214
309
|
nhncloud instance delete <instance-id> --yes
|
|
310
|
+
|
|
311
|
+
# 인스턴스 타입(flavor) 변경 — 후보 id 는 instance flavors 로 조회
|
|
312
|
+
nhncloud instance flavors --detail
|
|
313
|
+
nhncloud instance resize <instance-id> --flavor <flavor-id>
|
|
314
|
+
|
|
315
|
+
# resize 후 VERIFY_RESIZE 상태 — 확정 또는 롤백
|
|
316
|
+
nhncloud instance resize-confirm <instance-id>
|
|
317
|
+
nhncloud instance resize-revert <instance-id>
|
|
318
|
+
|
|
319
|
+
# 인스턴스 정지 / 시작
|
|
320
|
+
nhncloud instance stop <instance-id>
|
|
321
|
+
nhncloud instance start <instance-id>
|
|
322
|
+
|
|
323
|
+
# 재부팅 (기본 SOFT)
|
|
324
|
+
nhncloud instance reboot <instance-id>
|
|
325
|
+
|
|
326
|
+
# HARD 재부팅 (강제 전원 cycle)
|
|
327
|
+
nhncloud instance reboot <instance-id> --hard
|
|
328
|
+
|
|
329
|
+
# 키페어 목록 (name·fingerprint)
|
|
330
|
+
nhncloud instance keypairs
|
|
331
|
+
|
|
332
|
+
# 단일 키페어 조회
|
|
333
|
+
nhncloud instance keypair get <keypair-name>
|
|
334
|
+
|
|
335
|
+
# 키페어 생성 — NHN 이 키쌍 생성, private_key 를 0600 파일로 저장 (한 번만 받을 수 있음)
|
|
336
|
+
nhncloud instance keypair create <keypair-name> -o ./my-key.pem
|
|
337
|
+
|
|
338
|
+
# 기존 공개키 등록 (private_key 미반환)
|
|
339
|
+
nhncloud instance keypair create <keypair-name> --public-key ~/.ssh/id_rsa.pub
|
|
340
|
+
|
|
341
|
+
# 키페어 삭제
|
|
342
|
+
nhncloud instance keypair delete <keypair-name>
|
|
215
343
|
```
|
|
216
344
|
|
|
345
|
+
> **private_key 안내**: 키페어 생성 시 NHN 이 만든 private_key 는 생성 응답 **한 번만** 반환됩니다.
|
|
346
|
+
> `-o <keyfile>` 로 저장하거나 stdout 을 안전한 곳에 보관하세요. 분실 시 복구할 수 없습니다.
|
|
347
|
+
|
|
217
348
|
지원 region: `kr1` / `kr2` / `kr3` / `jp1` (`--region` 으로 override 가능).
|
|
218
349
|
|
|
350
|
+
### 네트워크 (Network)
|
|
351
|
+
|
|
352
|
+
`instance create --network <uuid>` 에 넣을 VPC id 를 확인하거나 서브넷 구성을 조회한다.
|
|
353
|
+
`network` 명령군은 `instance` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유한다 — 별도 설정이 필요 없다.
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# VPC 목록 (instance create --network <uuid> 에 넣을 VPC id 확인)
|
|
357
|
+
nhncloud network list
|
|
358
|
+
|
|
359
|
+
# 전체 필드 JSON
|
|
360
|
+
nhncloud network list --json
|
|
361
|
+
|
|
362
|
+
# 서브넷 목록 (소속 VPC·CIDR·가용 IP 확인)
|
|
363
|
+
nhncloud network subnet list
|
|
364
|
+
|
|
365
|
+
# 다른 region
|
|
366
|
+
nhncloud network list --region kr2
|
|
367
|
+
|
|
368
|
+
# create 흐름 — 확인한 VPC id 를 --network 에 사용 (--network 가 받는 uuid = VPC id, 실측 확정)
|
|
369
|
+
nhncloud instance create \
|
|
370
|
+
--name web \
|
|
371
|
+
--flavor <flavor-id> \
|
|
372
|
+
--image <image-id> \
|
|
373
|
+
--network <network-uuid>
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
> **`--network` 가 받는 id**: `network list` 의 VPC id 를 그대로 `--network` 에 사용한다.
|
|
377
|
+
> subnet id 가 아니다 — `instance list --json` 의 addresses 키와 VPC name 이 1:1 대응함을 실측으로 확인.
|
|
378
|
+
|
|
379
|
+
### Block Storage (Volume)
|
|
380
|
+
|
|
381
|
+
독립 블록 스토리지 볼륨을 관리한다.
|
|
382
|
+
`volume` 명령군은 `instance`·`network` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유한다 — 별도 설정이 필요 없다.
|
|
383
|
+
|
|
384
|
+
**볼륨 생성(`volume create`)·인스턴스 연결(`instance volume attach`)·연결 해제(`instance volume detach`)는 쓰기 작업이므로 실행 전 환경을 확인한다(수동 QA 필수).**
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
# 볼륨 목록 조회
|
|
388
|
+
nhncloud volume list
|
|
389
|
+
|
|
390
|
+
# 정렬·페이지네이션
|
|
391
|
+
nhncloud volume list --sort created_at:desc --limit 20
|
|
392
|
+
|
|
393
|
+
# 단일 볼륨 조회
|
|
394
|
+
nhncloud volume get <volume-id>
|
|
395
|
+
|
|
396
|
+
# 전체 필드 JSON
|
|
397
|
+
nhncloud volume get <volume-id> --json
|
|
398
|
+
|
|
399
|
+
# 볼륨 생성 — ⚠️ 쓰기 작업, 실행 전 환경 확인 필수
|
|
400
|
+
nhncloud volume create --size 10
|
|
401
|
+
|
|
402
|
+
# 이름·타입 지정
|
|
403
|
+
nhncloud volume create --size 50 --name my-volume --volume-type "General SSD"
|
|
404
|
+
|
|
405
|
+
# 인스턴스에 연결된 볼륨 목록 조회
|
|
406
|
+
nhncloud instance volumes <instance-id>
|
|
407
|
+
|
|
408
|
+
# 볼륨 연결 — ⚠️ 쓰기 작업 (--volume 플래그로 볼륨 ID 지정)
|
|
409
|
+
nhncloud instance volume attach <instance-id> --volume <volume-id>
|
|
410
|
+
|
|
411
|
+
# 볼륨 연결 해제 — ⚠️ 쓰기 작업 (인스턴스 ID + 볼륨 ID 위치 인수)
|
|
412
|
+
nhncloud instance volume detach <instance-id> <volume-id>
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
> **UX 비대칭**: `attach` 는 `--volume <id>` 플래그로 볼륨을 지정하고,
|
|
416
|
+
> `detach` 는 `<instanceId> <volumeId>` 위치 인수 두 개로 지정한다.
|
|
417
|
+
|
|
418
|
+
지원 region: `kr1` / `kr2` / `kr3` / `jp1` (`--region` 으로 override 가능).
|
|
419
|
+
|
|
420
|
+
### 공인 IP (Floating IP)
|
|
421
|
+
|
|
422
|
+
Floating IP 를 발급해 인스턴스에 부여하는 공인 IP 를 관리한다.
|
|
423
|
+
`floatingip` 명령군은 `network` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유한다.
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
# Floating IP 목록
|
|
427
|
+
nhncloud floatingip list
|
|
428
|
+
|
|
429
|
+
# Floating IP 발급 (--network 미지정 시 외부 VPC 자동 조회)
|
|
430
|
+
nhncloud floatingip create
|
|
431
|
+
nhncloud floatingip create --network <network-uuid>
|
|
432
|
+
|
|
433
|
+
# 삭제
|
|
434
|
+
nhncloud floatingip delete <floatingip-id> --yes
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
> **associate**: `floatingip associate <floatingip-id> <instance-id>` 는 instance→port_id 매핑 경로 미확정으로 보류 중.
|
|
438
|
+
> 실측으로 경로가 확정되면 후속 task 에서 추가한다.
|
|
439
|
+
|
|
440
|
+
### NHN Container Registry (NCR)
|
|
441
|
+
|
|
442
|
+
NCR Management API 로 레지스트리를 조회한다.
|
|
443
|
+
인증은 공통 UAK(`X-TC-AUTHENTICATION-ID/SECRET` 정적 헤더)를 재사용하며 OAuth 토큰 교환이 없다.
|
|
444
|
+
appKey 는 NHN Cloud 콘솔 → Container Registry 서비스에서 확인한다.
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
# ncr appkey 설정 (비대화형)
|
|
448
|
+
nhncloud configure --ncr-appkey <appkey>
|
|
449
|
+
|
|
450
|
+
# 레지스트리 목록 조회
|
|
451
|
+
nhncloud ncr list --app-key <appkey>
|
|
452
|
+
|
|
453
|
+
# region 지정 (기본: kr1)
|
|
454
|
+
nhncloud ncr list --region kr2 --app-key <appkey>
|
|
455
|
+
|
|
456
|
+
# JSON 출력
|
|
457
|
+
nhncloud ncr list --app-key <appkey> --json
|
|
458
|
+
|
|
459
|
+
# 단일 레지스트리 조회 (이름 또는 ID)
|
|
460
|
+
nhncloud ncr get <registry-name> --app-key <appkey>
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
appKey 를 `nhncloud configure --ncr-appkey <appkey>` 로 저장해 두면 `--app-key` 없이도 호출할 수 있다.
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
# configure 로 저장 후 --app-key 생략
|
|
467
|
+
nhncloud configure --ncr-appkey <appkey>
|
|
468
|
+
nhncloud ncr list
|
|
469
|
+
nhncloud ncr get <registry-name>
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
이미지(repository)·태그는 레지스트리 데이터플레인 Harbor REST API 를 직접 호출한다.
|
|
473
|
+
UAK 를 Basic Auth 로 사용하며 추가 설정은 없다.
|
|
474
|
+
|
|
475
|
+
```bash
|
|
476
|
+
# 이미지(repository) 목록 조회
|
|
477
|
+
nhncloud ncr images <registry>
|
|
478
|
+
|
|
479
|
+
# region 지정
|
|
480
|
+
nhncloud ncr images <registry> --region kr2
|
|
481
|
+
|
|
482
|
+
# JSON 출력
|
|
483
|
+
nhncloud ncr images <registry> --json
|
|
484
|
+
|
|
485
|
+
# 특정 이미지의 태그 목록 조회
|
|
486
|
+
nhncloud ncr tags <registry> <repository>
|
|
487
|
+
|
|
488
|
+
# JSON 출력 (태그·push_time·size)
|
|
489
|
+
nhncloud ncr tags <registry> <repository> --json
|
|
490
|
+
```
|
|
491
|
+
|
|
219
492
|
## 개발
|
|
220
493
|
|
|
221
494
|
```bash
|
|
@@ -224,4 +497,5 @@ pnpm run build # tsup 단일 번들 (dist/index.js)
|
|
|
224
497
|
pnpm tsc --noEmit # 타입 체크
|
|
225
498
|
node dist/index.js instance --help
|
|
226
499
|
node dist/index.js logncrash search --help
|
|
500
|
+
node dist/index.js ncr --help
|
|
227
501
|
```
|