@bifos/nhncloud-cli 0.3.0 → 0.4.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 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 볼륨 목록·조회·생성) 명령을 지원한다.
5
5
 
6
6
  ## 설치
7
7
 
@@ -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,136 @@ 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>
343
+ ```
344
+
345
+ > **private_key 안내**: 키페어 생성 시 NHN 이 만든 private_key 는 생성 응답 **한 번만** 반환됩니다.
346
+ > `-o <keyfile>` 로 저장하거나 stdout 을 안전한 곳에 보관하세요. 분실 시 복구할 수 없습니다.
347
+
348
+ 지원 region: `kr1` / `kr2` / `kr3` / `jp1` (`--region` 으로 override 가능).
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>
215
413
  ```
216
414
 
415
+ > **UX 비대칭**: `attach` 는 `--volume <id>` 플래그로 볼륨을 지정하고,
416
+ > `detach` 는 `<instanceId> <volumeId>` 위치 인수 두 개로 지정한다.
417
+
217
418
  지원 region: `kr1` / `kr2` / `kr3` / `jp1` (`--region` 으로 override 가능).
218
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
+
219
440
  ## 개발
220
441
 
221
442
  ```bash