@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 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
- return (keyType === "number" || keyType === "string") && typeof obj["name"] === "string";
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.0").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
+ 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bifos/nhncloud-cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "CLI tool for NHN Cloud services — AI agent & terminal friendly",
5
5
  "keywords": [
6
6
  "nhncloud",
@@ -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` (현재)