@bifos/nhncloud-cli 0.5.0 → 0.5.1
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 +55 -0
- package/dist/index.js +3 -2
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +36 -0
package/README.md
CHANGED
|
@@ -116,10 +116,27 @@ nhncloud logncrash search \
|
|
|
116
116
|
--query 'logType:"NORMAL"' \
|
|
117
117
|
--from 1h \
|
|
118
118
|
--to now
|
|
119
|
+
|
|
120
|
+
# body 필드 키워드 검색
|
|
121
|
+
nhncloud logncrash search \
|
|
122
|
+
--query 'body:request_received' \
|
|
123
|
+
--from 1h \
|
|
124
|
+
--to now
|
|
125
|
+
|
|
126
|
+
# body 부분 문자열 검색
|
|
127
|
+
nhncloud logncrash search \
|
|
128
|
+
--query 'body:*request_received*' \
|
|
129
|
+
--from 1h \
|
|
130
|
+
--to now
|
|
119
131
|
```
|
|
120
132
|
|
|
133
|
+
`--query` 는 콘솔의 간편 검색어가 아니라 Log & Crash Search API 의 Lucene 쿼리다.
|
|
134
|
+
body 검색 의도가 명확하면 `body:<keyword>` 또는 `body:*<keyword>*` 처럼 필드를 지정한다.
|
|
135
|
+
|
|
121
136
|
시간은 상대시간 (`1h` / `30m` / `2d` / `now`) 또는 ISO8601 (`2026-05-01T00:00:00+09:00`) 로 입력한다.
|
|
122
137
|
API 제약상 검색 시작은 최근 90일 이내, 검색 범위는 31일 이하여야 한다 (초과 시 입력 오류로 거절).
|
|
138
|
+
전송 직후에는 인덱싱 지연으로 잠시 0건이 나올 수 있다.
|
|
139
|
+
반복 검색이나 넓은 wildcard 검색은 API rate limit 에 걸릴 수 있으므로 시간 범위를 좁혀 확인한다.
|
|
123
140
|
|
|
124
141
|
### 로그 대량 추출 (export)
|
|
125
142
|
|
|
@@ -179,9 +196,47 @@ nhncloud logncrash send --body "deploy 시작" --app-version 2.3.0 --source batc
|
|
|
179
196
|
| JSON | `--json` | 자동화·AI 에이전트용 raw 데이터 + 페이지 메타 |
|
|
180
197
|
| quiet | `--quiet` | 행별 최소 출력 |
|
|
181
198
|
|
|
199
|
+
`--json`은 CLI가 가공한 출력 계약이다.
|
|
200
|
+
NHN Cloud 또는 OpenStack 원본 응답의 최상위 래퍼를 그대로 보존하지 않을 수 있다.
|
|
201
|
+
|
|
202
|
+
| 명령 | `--json` 출력 shape |
|
|
203
|
+
|------|---------------------|
|
|
204
|
+
| `logncrash search` | `{ totalItems, pageNumber, pageSize, data }` 객체 |
|
|
205
|
+
| `logncrash export` | 파일 출력 전용. stdout JSON 없음 |
|
|
206
|
+
| `deploy artifacts` | Deploy API `body` 객체 |
|
|
207
|
+
| `deploy server-groups` | Deploy API `body` 객체 |
|
|
208
|
+
| `deploy histories` | Deploy API `body` 객체 |
|
|
209
|
+
| `deploy binary-groups` | `binaryGroups` 래퍼를 언랩한 배열 |
|
|
210
|
+
| `deploy binaries` | `{ totalCount, binaries }` 객체 |
|
|
211
|
+
| `deploy upload` | `{ downloadUrl, binaryKey }` 객체 |
|
|
212
|
+
| `instance list` | `servers` 래퍼를 언랩한 server 배열 |
|
|
213
|
+
| `instance get` | `server` 래퍼를 언랩한 단일 server 객체 |
|
|
214
|
+
| `instance create --wait` | `server` 래퍼를 언랩한 단일 server 객체 |
|
|
215
|
+
| `instance flavors` | `flavors` 래퍼를 언랩한 flavor 배열 |
|
|
216
|
+
| `instance images` | `images` 래퍼를 언랩한 image 배열 |
|
|
217
|
+
| `instance availability-zones` | `availabilityZoneInfo` 래퍼를 언랩한 배열 |
|
|
218
|
+
| `instance keypairs` | `keypairs[].keypair`를 flatten한 keypair 배열 |
|
|
219
|
+
| `instance volumes` | `volumeAttachments` 래퍼를 언랩한 attachment 배열 |
|
|
220
|
+
| `network list` | VPC 배열 |
|
|
221
|
+
| `network subnet list` | subnet 배열 |
|
|
222
|
+
| `volume list` | volume 배열 |
|
|
223
|
+
| `volume get` | 단일 volume 객체 |
|
|
224
|
+
| `volume create` | 단일 volume 객체 |
|
|
225
|
+
| `floatingip list` | floating IP 배열 |
|
|
226
|
+
| `floatingip create` | 단일 floating IP 객체 |
|
|
227
|
+
| `ncr list` | `registries` 래퍼를 언랩한 registry 배열 |
|
|
228
|
+
| `ncr get` | `registry` 래퍼를 언랩한 단일 registry 객체 |
|
|
229
|
+
| `ncr images` | repository 배열 |
|
|
230
|
+
| `ncr tags` | tag 배열 |
|
|
231
|
+
|
|
232
|
+
예를 들어 `instance get --json`은 `.server.status`가 아니라 `.status`를 읽는다.
|
|
233
|
+
|
|
182
234
|
### 체이닝 예시
|
|
183
235
|
|
|
184
236
|
```bash
|
|
237
|
+
# 인스턴스 상태 확인
|
|
238
|
+
nhncloud instance get <instance-id> --json | jq -r '.status'
|
|
239
|
+
|
|
185
240
|
# 검색 결과에서 logBody 만 추출
|
|
186
241
|
nhncloud logncrash search --query '*' --from 1h --to now --json | jq -r '.data[].logBody'
|
|
187
242
|
|
package/dist/index.js
CHANGED
|
@@ -1535,7 +1535,8 @@ function isBinaryGroup(val) {
|
|
|
1535
1535
|
if (typeof val !== "object" || val === null) return false;
|
|
1536
1536
|
const obj = val;
|
|
1537
1537
|
const keyType = typeof obj["key"];
|
|
1538
|
-
|
|
1538
|
+
const descriptionType = typeof obj["description"];
|
|
1539
|
+
return (keyType === "number" || keyType === "string") && typeof obj["name"] === "string" && (descriptionType === "undefined" || descriptionType === "string" || obj["description"] === null);
|
|
1539
1540
|
}
|
|
1540
1541
|
function isBinary(val) {
|
|
1541
1542
|
if (typeof val !== "object" || val === null) return false;
|
|
@@ -4207,7 +4208,7 @@ var tagsCommand = new import_commander37.Command("tags").description("\uD2B9\uC8
|
|
|
4207
4208
|
|
|
4208
4209
|
// src/index.ts
|
|
4209
4210
|
var program = new import_commander38.Command();
|
|
4210
|
-
program.name("nhncloud").description("NHN Cloud CLI \u2014 AI agent & terminal friendly").version("0.5.
|
|
4211
|
+
program.name("nhncloud").description("NHN Cloud CLI \u2014 AI agent & terminal friendly").version("0.5.1").option("--json", "JSON \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825").option("--quiet", "\uCD5C\uC18C \uCD9C\uB825 (\uC790\uB3D9\uD654\uC6A9)").option("--no-color", "\uC0C9\uC0C1 \uBE44\uD65C\uC131\uD654");
|
|
4211
4212
|
program.hook("preAction", () => {
|
|
4212
4213
|
const opts = program.opts();
|
|
4213
4214
|
if (!opts.color || process.env["NO_COLOR"]) {
|
package/package.json
CHANGED
|
@@ -86,6 +86,30 @@ logncrash appkey 와 secret 은 콘솔 → Log & Crash Search → 프로젝트
|
|
|
86
86
|
| `--quiet` | 핵심 식별자만 출력 | 스크립팅 |
|
|
87
87
|
|
|
88
88
|
**AI 에이전트는 `--json` 을 사용하여 구조화된 데이터를 파싱하라.**
|
|
89
|
+
단, `--json`은 CLI 출력 계약이며 API 원본 래퍼를 그대로 보존하지 않을 수 있다.
|
|
90
|
+
|
|
91
|
+
| 명령 | `--json` 출력 shape |
|
|
92
|
+
|------|---------------------|
|
|
93
|
+
| `logncrash search` | `{ totalItems, pageNumber, pageSize, data }` 객체 |
|
|
94
|
+
| `deploy binary-groups` | `binaryGroups` 래퍼를 언랩한 배열 |
|
|
95
|
+
| `deploy binaries` | `{ totalCount, binaries }` 객체 |
|
|
96
|
+
| `instance list` | `servers` 래퍼를 언랩한 server 배열 |
|
|
97
|
+
| `instance get` | `server` 래퍼를 언랩한 단일 server 객체 |
|
|
98
|
+
| `instance flavors` | `flavors` 래퍼를 언랩한 flavor 배열 |
|
|
99
|
+
| `instance images` | `images` 래퍼를 언랩한 image 배열 |
|
|
100
|
+
| `instance availability-zones` | `availabilityZoneInfo` 래퍼를 언랩한 배열 |
|
|
101
|
+
| `instance keypairs` | `keypairs[].keypair`를 flatten한 keypair 배열 |
|
|
102
|
+
| `network list` | VPC 배열 |
|
|
103
|
+
| `network subnet list` | subnet 배열 |
|
|
104
|
+
| `volume list` | volume 배열 |
|
|
105
|
+
| `volume get` | 단일 volume 객체 |
|
|
106
|
+
| `floatingip list` | floating IP 배열 |
|
|
107
|
+
| `ncr list` | `registries` 래퍼를 언랩한 registry 배열 |
|
|
108
|
+
| `ncr get` | `registry` 래퍼를 언랩한 단일 registry 객체 |
|
|
109
|
+
| `ncr images` | repository 배열 |
|
|
110
|
+
| `ncr tags` | tag 배열 |
|
|
111
|
+
|
|
112
|
+
예: `nhncloud instance get <instance-id> --json`은 `.server.status`가 아니라 `.status`를 읽는다.
|
|
89
113
|
|
|
90
114
|
---
|
|
91
115
|
|
|
@@ -123,6 +147,18 @@ logncrash appkey 와 secret 은 콘솔 → Log & Crash Search → 프로젝트
|
|
|
123
147
|
|
|
124
148
|
전역 옵션: `--json` / `--quiet` / `--no-color`
|
|
125
149
|
|
|
150
|
+
`--query` 는 Log & Crash Search API 의 Lucene 쿼리 원문이다.
|
|
151
|
+
콘솔의 body 키워드 검색처럼 쓰고 싶으면 필드를 명시한다.
|
|
152
|
+
|
|
153
|
+
| 의도 | 쿼리 |
|
|
154
|
+
|------|------|
|
|
155
|
+
| body 단어 검색 | `body:request_received` |
|
|
156
|
+
| body 부분 문자열 검색 | `body:*request_received*` |
|
|
157
|
+
| logType 검색 | `logType:"ERROR"` |
|
|
158
|
+
|
|
159
|
+
전송 직후에는 인덱싱 지연으로 잠시 0건이 나올 수 있다.
|
|
160
|
+
반복 검색이나 넓은 wildcard 검색은 API rate limit 에 걸릴 수 있으므로 시간 범위를 좁혀 확인한다.
|
|
161
|
+
|
|
126
162
|
## 시간 입력 형식
|
|
127
163
|
|
|
128
164
|
- 상대시간: `1h` (1시간 전), `30m` (30분 전), `2d` (2일 전), `now` (현재)
|