@bifos/nhncloud-cli 0.10.1 → 0.12.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 +169 -14
- package/dist/index.js +1198 -138
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +31 -59
- package/skills/nhncloud-cli/references/common.md +24 -3
- package/skills/nhncloud-cli/references/loadbalancer.md +237 -0
- package/skills/nhncloud-cli/references/logncrash.md +32 -10
- package/skills/nhncloud-cli/references/ncs.md +43 -1
- package/skills/nhncloud-cli/references/troubleshooting.md +12 -3
package/README.md
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
[](https://github.com/jon890/nhncloud-cli/blob/main/LICENSE)
|
|
7
7
|
|
|
8
8
|
NHN Cloud 서비스를 AWS CLI 방식으로 호출하는 통합 CLI.
|
|
9
|
-
현재
|
|
10
|
-
`configure`, `commands`, `logncrash search/send/export`, `deploy`, `instance`, `network`, `volume`, `floatingip
|
|
9
|
+
현재 147개 command catalog 항목을 지원한다.
|
|
10
|
+
`configure`, `commands`, `logncrash search/send/export`, `deploy`, `instance`, `network`, `volume`, `floatingip` 명령을 지원한다.
|
|
11
|
+
`loadbalancer`, `ncr`, `nks`, `ncs` 명령으로 NHN Cloud 서비스를 조회·운영할 수 있다.
|
|
11
12
|
`skills`/`doctor` 로 Claude Code 스킬 설치와 상태 진단을 지원한다.
|
|
12
13
|
|
|
13
14
|
## 설치
|
|
@@ -24,17 +25,17 @@ npm install -g @bifos/nhncloud-cli
|
|
|
24
25
|
nhncloud configure
|
|
25
26
|
```
|
|
26
27
|
|
|
27
|
-
- profile → UAK(id/secret) → logncrash appkey
|
|
28
|
+
- profile → 공통 UAK(id/secret) → logncrash appkey → iaas 자격증명 → ncr appkey → ncs appkey 순으로 입력한다.
|
|
28
29
|
- profile 은 프로젝트 단위다 — 여러 NHN Cloud 프로젝트를 쓰면 profile 을 분리하되, 같은 UAK 를 쓴다면
|
|
29
30
|
대화형 마법사가 기존 profile 의 UAK 재사용 여부를 먼저 물어 재입력을 줄여준다.
|
|
30
31
|
- 저장 전 연결 테스트를 자동으로 수행한다 (`--no-verify` 로 생략 가능).
|
|
31
32
|
- CI/자동화는 flag 로 비대화형 설정이 가능하다.
|
|
32
33
|
|
|
33
34
|
```bash
|
|
34
|
-
# UAK + logncrash + ncs 비대화형 설정
|
|
35
|
+
# 공통 UAK + logncrash + ncs 비대화형 설정
|
|
35
36
|
nhncloud configure \
|
|
36
|
-
--uak-id <id> --uak-secret <secret> \
|
|
37
|
-
--logncrash-appkey <
|
|
37
|
+
--uak-id <uak-id> --uak-secret <uak-secret> \
|
|
38
|
+
--logncrash-appkey <appkey> \
|
|
38
39
|
[--ncs-appkey <appkey>] \
|
|
39
40
|
--no-verify
|
|
40
41
|
|
|
@@ -142,6 +143,11 @@ nhncloud deploy download <target> --binary-group <key> --binary-key <binary-key>
|
|
|
142
143
|
|
|
143
144
|
### 로그 검색
|
|
144
145
|
|
|
146
|
+
Log & Crash Search v3는 profile의 logncrash appkey와 공통 UAK를 사용한다.
|
|
147
|
+
CLI가 UAK를 OAuth 토큰으로 교환해 `X-NHN-Authorization: Bearer <token>`으로 인증한다.
|
|
148
|
+
기존 logncrash secret은 검색에 사용하거나 새 설정에 저장하지 않는다.
|
|
149
|
+
전환 호환 옵션 `nhncloud configure --logncrash-secret`은 경고 후 무시한다.
|
|
150
|
+
|
|
145
151
|
```bash
|
|
146
152
|
# 최근 1시간 NORMAL 로그
|
|
147
153
|
nhncloud logncrash search \
|
|
@@ -160,6 +166,15 @@ nhncloud logncrash search \
|
|
|
160
166
|
--query 'body:*request_received*' \
|
|
161
167
|
--from 1h \
|
|
162
168
|
--to now
|
|
169
|
+
|
|
170
|
+
# 다음 페이지 조회: 직전 JSON의 nextCursor를 그대로 전달
|
|
171
|
+
next_cursor="$(nhncloud logncrash search \
|
|
172
|
+
--query '*' --from 1h --to now --json | jq -r '.nextCursor // empty')"
|
|
173
|
+
if [ -n "$next_cursor" ]; then
|
|
174
|
+
nhncloud logncrash search \
|
|
175
|
+
--query '*' --from 1h --to now \
|
|
176
|
+
--cursor "$next_cursor" --json
|
|
177
|
+
fi
|
|
163
178
|
```
|
|
164
179
|
|
|
165
180
|
`--query` 는 콘솔의 간편 검색어가 아니라 Log & Crash Search API 의 Lucene 쿼리다.
|
|
@@ -169,6 +184,9 @@ body 검색 의도가 명확하면 `body:<keyword>` 또는 `body:*<keyword>*`
|
|
|
169
184
|
API 제약상 검색 시작은 최근 90일 이내, 검색 범위는 31일 이하여야 한다 (초과 시 입력 오류로 거절).
|
|
170
185
|
전송 직후에는 인덱싱 지연으로 잠시 0건이 나올 수 있다.
|
|
171
186
|
반복 검색이나 넓은 wildcard 검색은 API rate limit 에 걸릴 수 있으므로 시간 범위를 좁혀 확인한다.
|
|
187
|
+
검색 결과는 `logTime DESC`로 고정 정렬한다.
|
|
188
|
+
`--page`는 전환 호환을 위해 남아 있지만 `0`만 허용한다.
|
|
189
|
+
다음 페이지는 JSON 응답에 `nextCursor`가 있을 때 그 값을 `--cursor`로 변형 없이 전달한다.
|
|
172
190
|
|
|
173
191
|
### 로그 대량 추출 (export)
|
|
174
192
|
|
|
@@ -186,7 +204,9 @@ nhncloud logncrash export --query 'logType:"ERROR"' --from 1h --to now \
|
|
|
186
204
|
|
|
187
205
|
단발 검색(`search`)과 달리 scroll API 로 전체 결과(최대 10만 건)를 순회해 파일로 저장한다.
|
|
188
206
|
진행 상황은 stderr, 데이터는 파일에만 기록된다(stdout 비움).
|
|
189
|
-
|
|
207
|
+
중간 요청이 실패하면 원본 오류를 확인하고 검색 시간 범위를 좁혀 다시 실행한다.
|
|
208
|
+
기존 `--size`는 전환 호환 옵션이다.
|
|
209
|
+
명시하면 10~100 범위를 검증하고 폐기 예정 경고를 출력하지만 Search v3 요청에는 전달하지 않는다.
|
|
190
210
|
시간 범위 제한은 search 와 동일(90일 이내·31일 이하).
|
|
191
211
|
|
|
192
212
|
#### export 옵션
|
|
@@ -198,7 +218,7 @@ scrollKey 유효기간은 1분이므로 데이터가 많을 때는 `--size` 를
|
|
|
198
218
|
| `--to <time>` | 예 | 검색 끝 |
|
|
199
219
|
| `--output <file>` | 예 | 출력 파일 경로 |
|
|
200
220
|
| `--format <fmt>` | 아니오 | `jsonl`(기본, 한 줄당 한 로그) 또는 `json`(배열) |
|
|
201
|
-
| `--size <n>` | 아니오 |
|
|
221
|
+
| `--size <n>` | 아니오 | 폐기 예정 호환 옵션. 10~100 검증 후 경고하고 v3 요청에서는 무시 |
|
|
202
222
|
| `--force` | 아니오 | 출력 파일이 있으면 덮어쓴다 (기본 거부) |
|
|
203
223
|
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
204
224
|
|
|
@@ -218,7 +238,9 @@ echo "배치 작업 종료" | nhncloud logncrash send --level INFO
|
|
|
218
238
|
nhncloud logncrash send --body "deploy 시작" --app-version 2.3.0 --source batch
|
|
219
239
|
```
|
|
220
240
|
|
|
221
|
-
> logncrash send
|
|
241
|
+
> `logncrash send`는 Search v3 전환의 영향을 받지 않는다.
|
|
242
|
+
> 검색과 다른 collector로 전송하며 appkey만 사용한다.
|
|
243
|
+
> 단일 로그 본문은 8MB까지 허용한다.
|
|
222
244
|
|
|
223
245
|
### 출력 모드
|
|
224
246
|
|
|
@@ -246,7 +268,7 @@ root와 주요 service group의 `--help`에는 짧은 agent hint가 포함된다
|
|
|
246
268
|
| 명령 | `--json` 출력 shape |
|
|
247
269
|
|------|---------------------|
|
|
248
270
|
| `commands` | `{ commands: [{ path, description, arguments, options, subcommands }] }` |
|
|
249
|
-
| `logncrash search` | `{ totalItems, pageNumber, pageSize, data }` 객체 |
|
|
271
|
+
| `logncrash search` | `{ totalItems, pageNumber, pageSize, data, nextCursor? }` 객체 |
|
|
250
272
|
| `logncrash export` | 파일 출력 전용. stdout JSON 없음 |
|
|
251
273
|
| `deploy artifacts` | Deploy API `body` 객체 |
|
|
252
274
|
| `deploy server-groups` | Deploy API `body` 객체 |
|
|
@@ -269,6 +291,14 @@ root와 주요 service group의 `--help`에는 짧은 agent hint가 포함된다
|
|
|
269
291
|
| `volume create` | 단일 volume 객체 |
|
|
270
292
|
| `floatingip list` | floating IP 배열 |
|
|
271
293
|
| `floatingip create` | 단일 floating IP 객체 |
|
|
294
|
+
| `loadbalancer list` | Load Balancer 배열 |
|
|
295
|
+
| `loadbalancer get` | 단일 Load Balancer 객체 |
|
|
296
|
+
| `loadbalancer ipacl list` | IP ACL 그룹 배열 |
|
|
297
|
+
| `loadbalancer ipacl get` | 단일 IP ACL 그룹 객체 |
|
|
298
|
+
| `loadbalancer ipacl target list` | IP ACL 대상 배열 |
|
|
299
|
+
| `loadbalancer ipacl create/delete` | 작업 상태와 IP ACL 그룹 UUID 객체 |
|
|
300
|
+
| `loadbalancer ipacl target add/remove` | 대상 UUID와 재바인딩 결과 객체 |
|
|
301
|
+
| `loadbalancer set-ipacl/clear-ipacl` | 작업 상태와 Load Balancer UUID·그룹 UUID 객체 |
|
|
272
302
|
| `ncr list` | `registries` 래퍼를 언랩한 registry 배열 |
|
|
273
303
|
| `ncr get` | `registry` 래퍼를 언랩한 단일 registry 객체 |
|
|
274
304
|
| `ncr images` | repository 배열 |
|
|
@@ -309,8 +339,9 @@ nhncloud logncrash search --query '*' --from 1d --to now --json | jq '.totalItem
|
|
|
309
339
|
| `--query <lucene>` | 예 | Lucene 질의 문자열 |
|
|
310
340
|
| `--from <time>` | 예 | 검색 시작 (ISO8601 또는 상대시간) |
|
|
311
341
|
| `--to <time>` | 예 | 검색 끝 |
|
|
312
|
-
| `--page <n>` | 아니오 | pageNumber
|
|
313
|
-
| `--size <n>` | 아니오 | pageSize (기본 10,
|
|
342
|
+
| `--page <n>` | 아니오 | 전환 호환용 pageNumber. 기본 0이며 0만 허용 |
|
|
343
|
+
| `--size <n>` | 아니오 | pageSize (기본 10, 범위 1~100) |
|
|
344
|
+
| `--cursor <value>` | 아니오 | 직전 JSON 응답의 불투명한 `nextCursor` |
|
|
314
345
|
| `--profile <name>` | 아니오 | 사용할 profile |
|
|
315
346
|
|
|
316
347
|
전역 옵션: `--json` / `--quiet` / `--no-color`.
|
|
@@ -553,6 +584,106 @@ nhncloud floatingip delete <floatingip-id> --yes
|
|
|
553
584
|
> **associate**: `floatingip associate <floatingip-id> <instance-id>` 는 instance→port_id 매핑 경로 미확정으로 보류 중.
|
|
554
585
|
> 실측으로 경로가 확정되면 후속 task 에서 추가한다.
|
|
555
586
|
|
|
587
|
+
### Load Balancer와 IP ACL
|
|
588
|
+
|
|
589
|
+
Load Balancer와 IP ACL 그룹·대상을 조회하고 관리한다.
|
|
590
|
+
`loadbalancer` 명령군은 `network`와 같은 `iaas` 자격증명·Keystone 토큰·network endpoint를 공유한다.
|
|
591
|
+
|
|
592
|
+
자동화에서는 profile과 region을 명시하고 `--json`으로 조회한다.
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
# Load Balancer 목록과 단건 조회
|
|
596
|
+
nhncloud loadbalancer list --profile <profile> --region <region> --json
|
|
597
|
+
nhncloud loadbalancer get <loadbalancer> --profile <profile> --region <region> --json
|
|
598
|
+
|
|
599
|
+
# IP ACL 그룹 목록과 단건 조회
|
|
600
|
+
nhncloud loadbalancer ipacl list --profile <profile> --region <region> --json
|
|
601
|
+
nhncloud loadbalancer ipacl get <group> --profile <profile> --region <region> --json
|
|
602
|
+
|
|
603
|
+
# 그룹에 속한 IP ACL 대상 조회
|
|
604
|
+
nhncloud loadbalancer ipacl target list <group> \
|
|
605
|
+
--profile <profile> \
|
|
606
|
+
--region <region> \
|
|
607
|
+
--json
|
|
608
|
+
|
|
609
|
+
# IP ACL 그룹 생성과 삭제
|
|
610
|
+
nhncloud loadbalancer ipacl create \
|
|
611
|
+
--name <group-name> \
|
|
612
|
+
--action ALLOW \
|
|
613
|
+
--description <description> \
|
|
614
|
+
--profile <profile> \
|
|
615
|
+
--region <region> \
|
|
616
|
+
--json
|
|
617
|
+
nhncloud loadbalancer ipacl delete <group> \
|
|
618
|
+
--profile <profile> \
|
|
619
|
+
--region <region> \
|
|
620
|
+
--yes \
|
|
621
|
+
--json
|
|
622
|
+
|
|
623
|
+
# Load Balancer의 IP ACL 그룹 전체 교체와 전체 해제
|
|
624
|
+
nhncloud loadbalancer set-ipacl <loadbalancer> \
|
|
625
|
+
--group <group> \
|
|
626
|
+
--group <other-group> \
|
|
627
|
+
--profile <profile> \
|
|
628
|
+
--region <region> \
|
|
629
|
+
--yes \
|
|
630
|
+
--json
|
|
631
|
+
nhncloud loadbalancer clear-ipacl <loadbalancer> \
|
|
632
|
+
--profile <profile> \
|
|
633
|
+
--region <region> \
|
|
634
|
+
--yes \
|
|
635
|
+
--json
|
|
636
|
+
|
|
637
|
+
# IP ACL 대상 추가와 삭제
|
|
638
|
+
nhncloud loadbalancer ipacl target add <group> \
|
|
639
|
+
--cidr <ip-or-cidr> \
|
|
640
|
+
--profile <profile> \
|
|
641
|
+
--region <region> \
|
|
642
|
+
--yes \
|
|
643
|
+
--json
|
|
644
|
+
nhncloud loadbalancer ipacl target remove <target-id> \
|
|
645
|
+
--profile <profile> \
|
|
646
|
+
--region <region> \
|
|
647
|
+
--yes \
|
|
648
|
+
--json
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
`<loadbalancer>`와 `<group>`에는 이름 또는 UUID를 넣는다.
|
|
652
|
+
UUID가 정확히 일치하면 바로 선택하고, 이름은 정확히 하나만 일치해야 한다.
|
|
653
|
+
같은 이름이 여러 개면 오류에 표시되는 후보 UUID를 사용한다.
|
|
654
|
+
|
|
655
|
+
기본 테이블의 Load Balancer 목록 컬럼은 `id`, `name`, `vip_address`, `provisioning_status`, `operating_status`, `ipacl_group_action`이다.
|
|
656
|
+
IP ACL 그룹 목록 컬럼은 `id`, `name`, `action`, `ipacl_target_count`, `loadbalancer_count`다.
|
|
657
|
+
IP ACL 대상 목록 컬럼은 `id`, `cidr_address`, `description`, `ipacl_group_id`다.
|
|
658
|
+
`--json`은 응답 래퍼를 제거한 객체 또는 배열을 stdout에 출력하고, `--quiet`는 리소스 UUID만 한 줄에 하나씩 stdout에 출력한다.
|
|
659
|
+
진행 상황, 운영 경고, 오류는 stderr로 분리된다.
|
|
660
|
+
|
|
661
|
+
쓰기 명령은 대화형 확인을 열지 않는다.
|
|
662
|
+
삭제, 연결 교체, 대상 변경에는 `--yes`가 필수다.
|
|
663
|
+
`set-ipacl`은 지정한 그룹 목록으로 기존 연결을 전체 교체하고, `clear-ipacl`은 모든 연결을 해제한다.
|
|
664
|
+
|
|
665
|
+
대상 추가·삭제는 변경 전에 연결 상태를 수집한 뒤 관련 Load Balancer를 순차 재바인딩한다.
|
|
666
|
+
`--no-rebind`를 쓰면 재바인딩을 생략하지만 데이터 영역에 규칙이 즉시 반영되지 않을 수 있다.
|
|
667
|
+
대상 변경은 반영까지 약 10–20초가 걸릴 수 있다.
|
|
668
|
+
`ALLOW` 그룹에는 Load Balancer가 속한 VPC의 private CIDR을 사용한다.
|
|
669
|
+
|
|
670
|
+
재바인딩이 일부 실패하면 대상 변경은 되돌리지 않는다.
|
|
671
|
+
명령은 `status: "partial"`과 `rebind.failed[].retry_argv`를 stdout JSON에 먼저 출력한 뒤 종료 코드 1을 반환한다.
|
|
672
|
+
AI 에이전트는 문자열인 `retry_command`보다 배열인 `retry_argv`를 우선 사용한다.
|
|
673
|
+
사용자가 명시한 `--profile`과 `--region`도 복구 배열에 보존된다.
|
|
674
|
+
|
|
675
|
+
```bash
|
|
676
|
+
result_file="$(mktemp)"
|
|
677
|
+
if ! nhncloud loadbalancer ipacl target add <group> \
|
|
678
|
+
--cidr <ip-or-cidr> \
|
|
679
|
+
--profile <profile> \
|
|
680
|
+
--region <region> \
|
|
681
|
+
--yes \
|
|
682
|
+
--json >"$result_file"; then
|
|
683
|
+
jq '.rebind.failed[] | {error, retry_argv}' "$result_file"
|
|
684
|
+
fi
|
|
685
|
+
```
|
|
686
|
+
|
|
556
687
|
### NHN Container Registry (NCR)
|
|
557
688
|
|
|
558
689
|
NCR Management API 로 레지스트리를 조회한다.
|
|
@@ -702,8 +833,19 @@ nhncloud ncs workload list --app-key <appkey>
|
|
|
702
833
|
nhncloud ncs workload get <workload-id> --app-key <appkey>
|
|
703
834
|
|
|
704
835
|
# task 컨테이너 로그/이벤트 조회 (--task는 workload get 응답의 tasks[].id)
|
|
705
|
-
nhncloud ncs workload logs <workload-id>
|
|
706
|
-
|
|
836
|
+
nhncloud ncs workload logs <workload-id> \
|
|
837
|
+
--task <task-id> \
|
|
838
|
+
--container <name> \
|
|
839
|
+
--from 1h \
|
|
840
|
+
--to now \
|
|
841
|
+
--profile <profile> \
|
|
842
|
+
--json
|
|
843
|
+
nhncloud ncs workload events <workload-id> \
|
|
844
|
+
--task <task-id> \
|
|
845
|
+
--from 1h \
|
|
846
|
+
--to now \
|
|
847
|
+
--profile <profile> \
|
|
848
|
+
--json
|
|
707
849
|
|
|
708
850
|
# 실행 히스토리 / 예약 실행 히스토리 조회
|
|
709
851
|
nhncloud ncs workload history <workload-id> --app-key <appkey>
|
|
@@ -711,6 +853,19 @@ nhncloud ncs workload history get <workload-id> <history-id> --app-key <appkey>
|
|
|
711
853
|
nhncloud ncs workload schedule-history <workload-id> --app-key <appkey>
|
|
712
854
|
```
|
|
713
855
|
|
|
856
|
+
`workload logs`와 `workload events`의 `--from`·`--to`는 다음 입력을 받는다.
|
|
857
|
+
|
|
858
|
+
- 시간대와 초를 포함한 RFC3339 절대시간
|
|
859
|
+
- `now`
|
|
860
|
+
- 0 이상의 정수 뒤에 `m`, `h`, `d` 중 하나를 붙인 상대시간
|
|
861
|
+
|
|
862
|
+
상대시간 예시는 `30m`, `1h`, `2d`다.
|
|
863
|
+
|
|
864
|
+
입력은 API 호출 전에 UTC 초 단위 `Z` 문자열로 정규화된다.
|
|
865
|
+
두 옵션을 모두 생략하면 API 기본 범위를 사용하고, 한쪽만 지정할 수도 있다.
|
|
866
|
+
잘못된 날짜, 시간대 없는 절대시간, 역전된 범위는 자격증명과 API에 접근하기 전에 종료 코드 3으로 거부한다.
|
|
867
|
+
조회 데이터는 stdout, 진행 상황과 오류는 stderr에 출력한다.
|
|
868
|
+
|
|
714
869
|
template 생성·버전 생성처럼 복잡한 입력은 공식 API payload를 JSON 파일로 전달한다.
|
|
715
870
|
삭제 명령은 비대화형 환경에서 `--yes`가 필요하다.
|
|
716
871
|
|