@bifos/nhncloud-cli 0.6.0 → 0.8.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 +93 -2
- package/dist/index.js +1917 -175
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +49 -826
- package/skills/nhncloud-cli/references/common.md +134 -0
- package/skills/nhncloud-cli/references/deploy.md +112 -0
- package/skills/nhncloud-cli/references/iaas.md +126 -0
- package/skills/nhncloud-cli/references/logncrash.md +126 -0
- package/skills/nhncloud-cli/references/ncr.md +73 -0
- package/skills/nhncloud-cli/references/ncs.md +167 -0
- package/skills/nhncloud-cli/references/nks.md +95 -0
- package/skills/nhncloud-cli/references/troubleshooting.md +91 -0
|
@@ -1,842 +1,65 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: nhncloud-cli
|
|
3
|
-
description: NHN Cloud 서비스 CLI.
|
|
3
|
+
description: NHN Cloud 서비스 CLI. commands --json catalog, configure, Log & Crash(logncrash search/send/export), Deploy(deploy run/artifacts/server-groups/histories/binary-groups/binaries/upload/download), Compute(instance), VPC/network, Block Storage(volume), Floating IP(floatingip), NHN Container Registry(ncr), NHN Kubernetes Service(nks supports/cluster/nodegroup/addon/kubeconfig), NHN Container Service(ncs template/workload 조회·생성·변경·실행제어, malware 검사 설정·결과 조회) 등 NHN Cloud API를 터미널과 AI 에이전트에서 호출한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# nhncloud-cli
|
|
7
7
|
|
|
8
|
-
NHN Cloud 서비스를 AWS CLI 방식으로 호출하는 TypeScript CLI
|
|
9
|
-
|
|
8
|
+
NHN Cloud 서비스를 AWS CLI 방식으로 호출하는 TypeScript CLI다.
|
|
9
|
+
이 파일은 router다.
|
|
10
|
+
작업하려는 서비스에 맞는 reference를 먼저 읽고, 필요한 명령은 `--json`으로 확인한다.
|
|
10
11
|
|
|
11
|
-
##
|
|
12
|
+
## 먼저 읽을 것
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
nhncloud configure
|
|
25
|
-
|
|
26
|
-
# 특정 profile 대화형 설정
|
|
27
|
-
nhncloud configure --profile staging
|
|
28
|
-
|
|
29
|
-
# CI/자동화 — flag 로 비대화형 설정
|
|
30
|
-
nhncloud configure \
|
|
31
|
-
--uak-id <id> --uak-secret <secret> \
|
|
32
|
-
--logncrash-appkey <key> --logncrash-secret <secret> \
|
|
33
|
-
[--no-verify]
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### configure 옵션
|
|
37
|
-
|
|
38
|
-
| 옵션 | 설명 |
|
|
39
|
-
|------|------|
|
|
40
|
-
| `--profile <name>` | 대상 profile (기본 `default`) |
|
|
41
|
-
| `--uak-id <id>` | 개인 UAK ID |
|
|
42
|
-
| `--uak-secret <secret>` | 개인 UAK Secret |
|
|
43
|
-
| `--logncrash-appkey <key>` | logncrash appkey |
|
|
44
|
-
| `--logncrash-secret <secret>` | logncrash secret |
|
|
45
|
-
| `--ncr-appkey <key>` | NCR(Container Registry) appkey |
|
|
46
|
-
| `--no-verify` | 연결 테스트 생략 |
|
|
47
|
-
|
|
48
|
-
저장 파일 구조 (`~/.nhncloud/credentials.json`, mode 0600):
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"version": 1,
|
|
53
|
-
"profiles": {
|
|
54
|
-
"default": {
|
|
55
|
-
"userAccessKey": {
|
|
56
|
-
"id": "<uak-id>",
|
|
57
|
-
"secret": "<uak-secret>"
|
|
58
|
-
},
|
|
59
|
-
"logncrash": {
|
|
60
|
-
"appkey": "<appkey>",
|
|
61
|
-
"secret": "<secretkey>"
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
UAK 는 NHN Cloud 콘솔 → 계정 → User Access Key 에서 발급한다.
|
|
69
|
-
logncrash appkey 와 secret 은 콘솔 → Log & Crash Search → 프로젝트 설정에서 확인한다.
|
|
70
|
-
|
|
71
|
-
선택적으로 `~/.nhncloud/config.json` 으로 기본 profile 을 지정할 수 있다.
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"version": 1,
|
|
76
|
-
"defaultProfile": "default"
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## 출력 모드
|
|
81
|
-
|
|
82
|
-
| 플래그 | 설명 | 용도 |
|
|
83
|
-
|--------|------|------|
|
|
84
|
-
| (없음) | 사람이 읽기 좋은 테이블 | 기본 |
|
|
85
|
-
| `--json` | JSON 출력 (stdout) | 파싱, 체이닝 |
|
|
86
|
-
| `--quiet` | 핵심 식별자만 출력 | 스크립팅 |
|
|
87
|
-
|
|
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
|
-
| `nks supports` | 지원 Kubernetes version / event type 객체 |
|
|
112
|
-
| `nks cluster list` | cluster 배열 |
|
|
113
|
-
| `nks cluster events` | event 배열 |
|
|
114
|
-
| `nks nodegroup list` | nodegroup 배열 |
|
|
115
|
-
| `nks addon-type list` | addon type 배열 |
|
|
116
|
-
| `nks addon list` | addon 배열 |
|
|
117
|
-
| `nks cluster addon list` | cluster addon 배열 |
|
|
118
|
-
|
|
119
|
-
NKS 단건 조회는 API 객체를 그대로 반환한다.
|
|
120
|
-
예를 들어 `nks cluster get`, `nks cluster event`, `nks nodegroup get`, `nks addon-type get`, `nks addon get`, `nks cluster addon get`, `nks cluster ipacl`, `nks nodegroup autoscale` 은 table 출력용 최소 컬럼을 만들고 `--json` 에서는 raw 객체를 보존한다.
|
|
121
|
-
NKS 쓰기 명령 중 생성·resize·설정 변경·노드 action·애드온 변경은 `{ uuid }` 응답을 반환한다.
|
|
122
|
-
삭제 명령은 성공 메시지만 stderr에 쓰고 stdout은 비운다.
|
|
123
|
-
`nks cluster kubeconfig` 는 kubeconfig 문자열을 stdout 또는 파일로 저장한다.
|
|
124
|
-
|
|
125
|
-
예: `nhncloud instance get <instance-id> --json`은 `.server.status`가 아니라 `.status`를 읽는다.
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## 의도 → 커맨드 매핑
|
|
130
|
-
|
|
131
|
-
| 의도 | 커맨드 |
|
|
132
|
-
|------|--------|
|
|
133
|
-
| 최초 자격증명 설정 | `nhncloud configure` |
|
|
134
|
-
| CI/자동화 자격증명 설정 | `nhncloud configure --uak-id <id> --uak-secret <secret> --no-verify` |
|
|
135
|
-
| 최근 1시간 로그 검색 | `nhncloud logncrash search --query '*' --from 1h --to now` |
|
|
136
|
-
| 특정 logType 필터 검색 | `nhncloud logncrash search --query 'logType:"ERROR"' --from 1h --to now` |
|
|
137
|
-
| 시간 범위 지정 검색 | `nhncloud logncrash search --query '*' --from 2024-01-01T00:00:00+09:00 --to 2024-01-01T12:00:00+09:00` |
|
|
138
|
-
| 페이지네이션 | `nhncloud logncrash search --query '*' --from 1h --to now --page 1 --size 50` |
|
|
139
|
-
| 다른 profile 사용 | `nhncloud logncrash search --query '*' --from 1h --to now --profile staging` |
|
|
140
|
-
| 로그 대량 추출 (파일로) | `nhncloud logncrash export --query '<lucene>' --from 1h --to now --output logs.jsonl` |
|
|
141
|
-
| Log & Crash 로그 전송 | `nhncloud logncrash send --body "<메시지>" --level INFO` |
|
|
142
|
-
| NCR 레지스트리 목록 조회 | `nhncloud ncr list --app-key <appkey>` |
|
|
143
|
-
| NCR 레지스트리 목록 (JSON 파싱용) | `nhncloud ncr list --app-key <appkey> --json` |
|
|
144
|
-
| NCR 단일 레지스트리 조회 | `nhncloud ncr get <registry-name> --app-key <appkey>` |
|
|
145
|
-
| NCR 이미지(repository) 목록 조회 | `nhncloud ncr images <registry>` |
|
|
146
|
-
| NCR 이미지 목록 (JSON) | `nhncloud ncr images <registry> --json` |
|
|
147
|
-
| NCR 태그 목록 조회 | `nhncloud ncr tags <registry> <repository>` |
|
|
148
|
-
| NCR 태그 목록 (JSON) | `nhncloud ncr tags <registry> <repository> --json` |
|
|
149
|
-
| NKS 지원 버전 조회 | `nhncloud nks supports --json` |
|
|
150
|
-
| NKS 클러스터 목록 조회 | `nhncloud nks cluster list --json` |
|
|
151
|
-
| NKS kubeconfig 저장 | `nhncloud nks cluster kubeconfig <cluster> --output ./kubeconfig` |
|
|
152
|
-
| NKS 노드 그룹 목록 조회 | `nhncloud nks nodegroup list <cluster> --json` |
|
|
153
|
-
| NKS 애드온 목록 조회 | `nhncloud nks addon list --k8s-version v1.30.1 --json` |
|
|
154
|
-
| NKS 클러스터 애드온 설치 | `nhncloud nks cluster addon install <cluster> --name coredns --version 1.0.0 --resolve-conflicts overwrite` |
|
|
155
|
-
|
|
156
|
-
## logncrash search 옵션
|
|
157
|
-
|
|
158
|
-
| 옵션 | 필수 | 설명 |
|
|
159
|
-
|------|:---:|------|
|
|
160
|
-
| `--query <lucene>` | 예 | Lucene 질의 문자열. API 에 그대로 전달 |
|
|
161
|
-
| `--from <time>` | 예 | 검색 시작. ISO8601 또는 상대시간 |
|
|
162
|
-
| `--to <time>` | 예 | 검색 끝. 형식 동일 |
|
|
163
|
-
| `--page <n>` | 아니오 | pageNumber (기본 0) |
|
|
164
|
-
| `--size <n>` | 아니오 | pageSize (기본 10, 최대 100) |
|
|
165
|
-
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
166
|
-
|
|
167
|
-
전역 옵션: `--json` / `--quiet` / `--no-color`
|
|
168
|
-
|
|
169
|
-
`--query` 는 Log & Crash Search API 의 Lucene 쿼리 원문이다.
|
|
170
|
-
콘솔의 body 키워드 검색처럼 쓰고 싶으면 필드를 명시한다.
|
|
171
|
-
|
|
172
|
-
| 의도 | 쿼리 |
|
|
173
|
-
|------|------|
|
|
174
|
-
| body 단어 검색 | `body:request_received` |
|
|
175
|
-
| body 부분 문자열 검색 | `body:*request_received*` |
|
|
176
|
-
| logType 검색 | `logType:"ERROR"` |
|
|
177
|
-
|
|
178
|
-
전송 직후에는 인덱싱 지연으로 잠시 0건이 나올 수 있다.
|
|
179
|
-
반복 검색이나 넓은 wildcard 검색은 API rate limit 에 걸릴 수 있으므로 시간 범위를 좁혀 확인한다.
|
|
180
|
-
|
|
181
|
-
## 시간 입력 형식
|
|
182
|
-
|
|
183
|
-
- 상대시간: `1h` (1시간 전), `30m` (30분 전), `2d` (2일 전), `now` (현재)
|
|
184
|
-
- ISO8601 직접 입력: `2024-01-01T00:00:00+09:00`
|
|
185
|
-
|
|
186
|
-
API 제약:
|
|
187
|
-
|
|
188
|
-
- 검색 시작(`--from`)은 최근 90일 이내여야 한다.
|
|
189
|
-
- 검색 범위(`--to` - `--from`)는 31일 이하여야 한다.
|
|
190
|
-
|
|
191
|
-
## 체이닝 예시
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
# 오류 로그 추출 후 jq 로 본문만 보기
|
|
195
|
-
nhncloud logncrash search \
|
|
196
|
-
--query 'logType:"ERROR"' \
|
|
197
|
-
--from 1h --to now \
|
|
198
|
-
--json | jq '.data[].logBody'
|
|
199
|
-
|
|
200
|
-
# 전체 건수만 확인
|
|
201
|
-
nhncloud logncrash search \
|
|
202
|
-
--query '*' \
|
|
203
|
-
--from 1h --to now \
|
|
204
|
-
--json | jq '.totalItems'
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## 에러 코드
|
|
208
|
-
|
|
209
|
-
| 상황 | exit code |
|
|
210
|
-
|------|-----------|
|
|
211
|
-
| 자격증명 파일 없음·형식 오류 | 4 (CONFIG_ERROR) |
|
|
212
|
-
| 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
213
|
-
| API 오류 / 봉투 isSuccessful:false | 1 (API_ERROR) |
|
|
214
|
-
| 시간 범위 초과·필수 옵션 누락 | 3 (PARAM_ERROR) |
|
|
215
|
-
|
|
216
|
-
### logncrash export (대량 추출)
|
|
217
|
-
|
|
218
|
-
- `nhncloud logncrash export` — 검색 결과 전체를 파일로 내보낸다.
|
|
219
|
-
단발 검색(search)이 한 페이지만 보여주는 것과 달리, scroll 로 전체(최대 10만 건)를 순회한다.
|
|
220
|
-
- `--output <file>` 필수. 기본은 JSON Lines(한 줄당 한 로그), `--format json` 이면 JSON 배열. 기존 파일은 기본 거부 — 덮어쓰려면 `--force`.
|
|
221
|
-
- 진행 상황은 stderr, 데이터는 파일에만 쓴다(stdout 비움).
|
|
222
|
-
- scrollKey 는 1분 만료 — 데이터가 많아 1분을 넘기면 만료 에러가 난다.
|
|
223
|
-
이때는 검색 범위를 좁히거나 `--size`(범위 10~100, 기본 100)를 키워 페이지 수를 줄인 뒤 다시 시도한다.
|
|
224
|
-
- 시간 범위 제한은 search 와 동일(90일 이내·31일 이하).
|
|
14
|
+
| 상황 | 읽을 reference |
|
|
15
|
+
|------|----------------|
|
|
16
|
+
| 명령 경로, 인수, option metadata 확인 | `nhncloud commands --json` 실행 후 필요한 reference 선택 |
|
|
17
|
+
| 설치, configure, profile, 출력 모드, 에러 코드, 자동화 기본 규칙 | [common.md](references/common.md) |
|
|
18
|
+
| Log & Crash 검색, scroll export, 로그 전송 | [logncrash.md](references/logncrash.md) |
|
|
19
|
+
| Deploy 실행, 배포 조회, 바이너리 업로드/다운로드 | [deploy.md](references/deploy.md) |
|
|
20
|
+
| Compute instance, network, volume, floatingip | [iaas.md](references/iaas.md) |
|
|
21
|
+
| NCR 레지스트리, 이미지, 태그 조회 | [ncr.md](references/ncr.md) |
|
|
22
|
+
| NKS 클러스터, 노드 그룹, 애드온, kubeconfig | [nks.md](references/nks.md) |
|
|
23
|
+
| NCS template, workload 조회·생성·변경·실행제어, malware 검사 설정·결과 조회 | [ncs.md](references/ncs.md) |
|
|
24
|
+
| 인증 실패, profile 누락, region mismatch, JSON shape 혼동, scroll 제한 | [troubleshooting.md](references/troubleshooting.md) |
|
|
225
25
|
|
|
226
|
-
|
|
26
|
+
## 공통 우선 규칙
|
|
227
27
|
|
|
228
|
-
-
|
|
229
|
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
-
|
|
233
|
-
|
|
28
|
+
- 구조화 출력이 필요하면 `--json`을 우선 사용한다.
|
|
29
|
+
- 스크립트 체이닝은 해당 명령이 `--quiet` 식별자 출력을 문서화했는지 확인한 뒤 사용한다.
|
|
30
|
+
- profile은 기본값에 의존하지 말고 가능하면 `--profile <name>`을 명시한다.
|
|
31
|
+
- IaaS 계열(`instance`, `network`, `volume`, `floatingip`, `nks`)은 region이 중요하면 `--region <region>`을 명시한다.
|
|
32
|
+
- 삭제, 제거, 비용 발생, 리소스 생성 같은 파괴적/쓰기 명령은 `--yes` 없으면 대화형 confirm이 있을 수 있다.
|
|
33
|
+
- 데이터는 stdout, 진행 상황과 에러는 stderr에 출력한다.
|
|
34
|
+
- 비밀값, appkey, tenantId, 실제 instance/network id는 문서나 이슈에 그대로 쓰지 않고 placeholder를 사용한다.
|
|
234
35
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
## deploy — NHN Cloud Deploy 배포 실행
|
|
238
|
-
|
|
239
|
-
`deploy` 명령군은 NHN Cloud Deploy v2.1 API 를 호출한다.
|
|
240
|
-
UAK(User Access Key) 를 OAuth `client_credentials` 로 교환한 Bearer 토큰으로 인증하며, 토큰은 만료 전까지 캐시한다.
|
|
241
|
-
|
|
242
|
-
### deploy 설정
|
|
243
|
-
|
|
244
|
-
**`~/.nhncloud/credentials.json`** 에 profile 공통 `userAccessKey` 블록을 추가한다.
|
|
245
|
-
`nhncloud configure` 로 설정하는 것을 권장한다.
|
|
246
|
-
|
|
247
|
-
```json
|
|
248
|
-
{
|
|
249
|
-
"version": 1,
|
|
250
|
-
"profiles": {
|
|
251
|
-
"default": {
|
|
252
|
-
"userAccessKey": {
|
|
253
|
-
"id": "<user-access-key-id>",
|
|
254
|
-
"secret": "<user-access-key-secret>"
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
**`~/.nhncloud/config.json`** 에 deploy target 추가 (배포 좌표 — 비밀 아님):
|
|
262
|
-
|
|
263
|
-
```json
|
|
264
|
-
{
|
|
265
|
-
"version": 1,
|
|
266
|
-
"defaultProfile": "default",
|
|
267
|
-
"deploy": {
|
|
268
|
-
"targets": {
|
|
269
|
-
"my-service": {
|
|
270
|
-
"appKey": "<appKey>",
|
|
271
|
-
"artifactId": "<artifactId>",
|
|
272
|
-
"serverGroupId": "<serverGroupId>",
|
|
273
|
-
"scenarioIds": "<id1,id2>"
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
UAK 는 NHN Cloud 콘솔 → 계정 → User Access Key 에서 발급한다.
|
|
281
|
-
배포 좌표(appKey·artifactId·serverGroupId·scenarioIds)는 Deploy 콘솔에서 확인한다.
|
|
282
|
-
|
|
283
|
-
### 의도 → 커맨드 매핑
|
|
284
|
-
|
|
285
|
-
| 의도 | 커맨드 |
|
|
286
|
-
|------|--------|
|
|
287
|
-
| 배포 실행 (동기 완료 대기) | `nhncloud deploy run my-service` |
|
|
288
|
-
| 배포 실행 (즉시 반환) | `nhncloud deploy run my-service --async` |
|
|
289
|
-
| 특정 호스트만 배포 | `nhncloud deploy run my-service --target-hosts <host1,host2>` |
|
|
290
|
-
| 아티팩트 목록 조회 | `nhncloud deploy artifacts my-service` |
|
|
291
|
-
| 서버그룹 목록 조회 | `nhncloud deploy server-groups my-service` |
|
|
292
|
-
| 배포 이력 조회 | `nhncloud deploy histories my-service` |
|
|
293
|
-
| 바이너리 그룹 목록 | `nhncloud deploy binary-groups <target>` |
|
|
294
|
-
| 바이너리 목록 | `nhncloud deploy binaries <target> --binary-group <key>` (전체 필드는 `--json`) |
|
|
295
|
-
| 바이너리 업로드 | `nhncloud deploy upload <target> --file <path> --binary-group <key>` |
|
|
296
|
-
| 바이너리 다운로드 | `nhncloud deploy download <target> --binary-group <key> --binary-key <key> -o <file>` |
|
|
297
|
-
| 다른 profile 사용 | `nhncloud deploy run my-service --profile staging` |
|
|
298
|
-
|
|
299
|
-
### deploy run 옵션
|
|
300
|
-
|
|
301
|
-
| 옵션 | 필수 | 설명 |
|
|
302
|
-
|------|:---:|------|
|
|
303
|
-
| `<target>` | 예 | config.json 의 deploy target 이름 |
|
|
304
|
-
| `--app-key <k>` | 아니오 | target 의 appKey override |
|
|
305
|
-
| `--artifact-id <id>` | 아니오 | target 의 artifactId override |
|
|
306
|
-
| `--server-group-id <id>` | 아니오 | target 의 serverGroupId override |
|
|
307
|
-
| `--scenario-ids <csv>` | 아니오 | target 의 scenarioIds override |
|
|
308
|
-
| `--target-hosts <csv>` | 아니오 | 대상 호스트 (생략 시 서버그룹 전체) |
|
|
309
|
-
| `--concurrent <n>` | 아니오 | 병렬 배포 수 (기본 1) |
|
|
310
|
-
| `--next-when-fail` | 아니오 | 시나리오 실패 시에도 진행 |
|
|
311
|
-
| `--note <s>` | 아니오 | 배포 메모 |
|
|
312
|
-
| `--async` | 아니오 | 즉시 반환 (기본은 완료 대기) |
|
|
313
|
-
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
314
|
-
|
|
315
|
-
**동기 모드 (`--async` 미지정, 기본값)**: 서버가 배포 완료까지 응답을 보류한다.
|
|
316
|
-
긴 배포는 수 분이 걸릴 수 있으나 CLI 자체 폴링 없이 응답을 기다린다.
|
|
317
|
-
|
|
318
|
-
**비동기 모드 (`--async`)**: 즉시 `deploying` 상태를 반환한다.
|
|
319
|
-
완료 확인은 `deploy histories` 로 한다.
|
|
320
|
-
|
|
321
|
-
### 체이닝 예시
|
|
36
|
+
## 빠른 시작
|
|
322
37
|
|
|
323
38
|
```bash
|
|
324
|
-
|
|
325
|
-
nhncloud deploy artifacts my-service --json | jq -r '.[0].artifactId'
|
|
326
|
-
|
|
327
|
-
# 특정 아티팩트로 override 하여 배포
|
|
328
|
-
nhncloud deploy run my-service --artifact-id <artifactId>
|
|
329
|
-
|
|
330
|
-
# 배포 이력에서 최근 상태만 확인
|
|
331
|
-
nhncloud deploy histories my-service --json | jq '.[0] | {deployKey, deployStatus}'
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### deploy 바이너리 조회
|
|
335
|
-
|
|
336
|
-
- `nhncloud deploy binary-groups <target>` — 아티팩트의 바이너리 그룹 목록을 조회한다.
|
|
337
|
-
출력의 key 를 binaries 입력으로 쓴다.
|
|
338
|
-
- `nhncloud deploy binaries <target> --binary-group <key>` — 해당 그룹의 바이너리 목록을 조회한다.
|
|
339
|
-
컬럼: version·binaryName·size(bytes)·uploadDate·uploader.
|
|
340
|
-
`--binary-group` 은 필수다.
|
|
341
|
-
- 정렬은 `--sort-key UPLOAD_DATE --sort-direction DESC`, 페이지는 `--page-num` / `--page-size`.
|
|
342
|
-
- size 는 bytes 정수이며 KB/MB 변환 없이 원시값으로 출력한다.
|
|
343
|
-
정밀값은 `--json` 으로 확인한다.
|
|
344
|
-
|
|
345
|
-
### deploy 바이너리 전송
|
|
346
|
-
|
|
347
|
-
- `nhncloud deploy upload <target> --file <path> --binary-group <key>` — 로컬 파일을 바이너리 그룹에 업로드 (multipart). `--application-type`(기본 server) · `--description` 선택. 출력의 binaryKey 를 download 입력으로 쓴다. `--quiet` 면 binaryKey 만.
|
|
348
|
-
- `nhncloud deploy download <target> --binary-group <key> --binary-key <key> -o <file>` — 바이너리를 파일로 저장. 대상이 이미 있으면 기본 거부, `--force` 로 덮어쓴다.
|
|
349
|
-
- 그룹 key 와 바이너리 key 는 `deploy binary-groups` / `deploy binaries` 로 확인한다.
|
|
350
|
-
|
|
351
|
-
### deploy 에러 코드
|
|
352
|
-
|
|
353
|
-
| 상황 | exit code |
|
|
354
|
-
|------|-----------|
|
|
355
|
-
| UAK 누락 / config target 없음 | 4 (CONFIG_ERROR) 또는 3 (PARAM_ERROR) |
|
|
356
|
-
| OAuth 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
357
|
-
| Deploy API 오류 / 봉투 실패 | 1 (API_ERROR) |
|
|
358
|
-
|
|
359
|
-
---
|
|
360
|
-
|
|
361
|
-
## instance — Compute 인스턴스 발급·조회·삭제
|
|
362
|
-
|
|
363
|
-
`instance` 명령군은 OpenStack Nova v2 호환 Compute API 를 호출한다.
|
|
364
|
-
Keystone v2 토큰 인증을 사용하며 토큰은 만료 전까지 region 별로 캐시한다.
|
|
365
|
-
|
|
366
|
-
### instance 설정
|
|
367
|
-
|
|
368
|
-
`nhncloud configure` 대화형 마법사에서 "iaas 자격증명도 설정하시겠습니까?" 에 응답하거나,
|
|
369
|
-
flag 로 직접 입력한다.
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# 대화형 (권장)
|
|
39
|
+
npm install -g @bifos/nhncloud-cli
|
|
373
40
|
nhncloud configure
|
|
374
|
-
|
|
375
|
-
# 비대화형 — API 비밀번호는 env 로 전달 (cmdline 노출 방지)
|
|
376
|
-
NHNCLOUD_IAAS_PASSWORD=<api-password> nhncloud configure \
|
|
377
|
-
--iaas-tenant-id <tenant-id> \
|
|
378
|
-
--iaas-username <iam-username> \
|
|
379
|
-
--iaas-region kr1 \
|
|
380
|
-
--no-verify
|
|
41
|
+
nhncloud logncrash search --query '*' --from 1h --to now --json
|
|
381
42
|
```
|
|
382
43
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
### 의도 → 커맨드 매핑
|
|
409
|
-
|
|
410
|
-
| 의도 | 커맨드 |
|
|
411
|
-
|------|--------|
|
|
412
|
-
| 인스턴스 목록 조회 | `nhncloud instance list` |
|
|
413
|
-
| 이미지 목록 조회 | `nhncloud instance images` (create --image 소스, 전체 필드는 `--json`) |
|
|
414
|
-
| 특정 노출 범위 이미지 | `nhncloud instance images --visibility public` |
|
|
415
|
-
| 인스턴스 타입(flavor) 목록 | `nhncloud instance flavors` |
|
|
416
|
-
| 가용성 영역 목록 | `nhncloud instance availability-zones` |
|
|
417
|
-
| 인스턴스 타입 상세 (스펙 포함) | `nhncloud instance flavors --detail` (전체 필드는 `--json`) |
|
|
418
|
-
| 키페어 목록 | `nhncloud instance keypairs` |
|
|
419
|
-
| 키페어 생성 (키 저장) | `nhncloud instance keypair create <keypair-name> -o ./key.pem` |
|
|
420
|
-
| 키페어 삭제 | `nhncloud instance keypair delete <keypair-name>` |
|
|
421
|
-
| 특정 인스턴스 상태 조회 | `nhncloud instance get <id>` |
|
|
422
|
-
| 인스턴스 생성 (즉시 반환) | `nhncloud instance create --name <name> --flavor <id> --image <id> --network <uuid>` |
|
|
423
|
-
| 인스턴스 생성 + ACTIVE 대기 | `nhncloud instance create ... --wait` |
|
|
424
|
-
| GPU 인스턴스 생성 | `nhncloud instance create --flavor <gpu-flavor-id> --boot-volume-size <gb> ...` (GPU 는 boot-from-volume 필수) |
|
|
425
|
-
| 인스턴스 삭제 (confirm 없이) | `nhncloud instance delete <id> --yes` |
|
|
426
|
-
| 인스턴스 시작 | `nhncloud instance start <id>` |
|
|
427
|
-
| 인스턴스 정지 | `nhncloud instance stop <id>` |
|
|
428
|
-
| 인스턴스 재부팅 | `nhncloud instance reboot <id>` (`--hard` 로 HARD) |
|
|
429
|
-
| 인스턴스 타입 변경 | `nhncloud instance resize <id> --flavor <flavor-id>` |
|
|
430
|
-
| resize 확정 | `nhncloud instance resize-confirm <id>` |
|
|
431
|
-
| resize 롤백 | `nhncloud instance resize-revert <id>` |
|
|
432
|
-
| 다른 region 사용 | `nhncloud instance list --region kr2` |
|
|
433
|
-
| 다른 profile 사용 | `nhncloud instance list --profile staging` |
|
|
434
|
-
|
|
435
|
-
### instance 전원 제어 (start / stop / reboot)
|
|
436
|
-
|
|
437
|
-
- `nhncloud instance start <id>` — 정지된(SHUTOFF) 인스턴스를 켠다 (→ ACTIVE).
|
|
438
|
-
- `nhncloud instance stop <id>` — 동작 중인(ACTIVE) 인스턴스를 끈다 (→ SHUTOFF).
|
|
439
|
-
- `nhncloud instance reboot <id>` — 재부팅한다. 기본은 SOFT(OS graceful), `--hard` 는 강제 전원 cycle.
|
|
440
|
-
- 세 명령 모두 요청만 보내고(202 무본문) 상태 전이는 비동기다. 전이 확인은 `nhncloud instance get <id>` 로 한다.
|
|
441
|
-
|
|
442
|
-
### instance 타입 변경 (resize)
|
|
443
|
-
|
|
444
|
-
- `nhncloud instance resize <id> --flavor <flavor-id>` — 인스턴스 타입(flavor)을 바꾼다. 사전 상태는 ACTIVE 또는 SHUTOFF.
|
|
445
|
-
- 변경할 `<flavor-id>` 는 `nhncloud instance flavors --detail` 로 후보를 조회해 고른다 (vcpus·ram·disk 비교).
|
|
446
|
-
- resize 후 인스턴스는 VERIFY_RESIZE 에서 멈춘다. `resize-confirm <id>` 로 새 flavor 를 고정하거나 `resize-revert <id>` 로 롤백한다.
|
|
447
|
-
- 상태 전이는 비동기다 — `nhncloud instance get <id>` 로 status 를 확인한다.
|
|
448
|
-
|
|
449
|
-
### instance keypair 관리
|
|
450
|
-
|
|
451
|
-
- `nhncloud instance keypairs` — 키페어 name·fingerprint 목록.
|
|
452
|
-
create 의 `--key-name` 에 넣을 키를 고를 때 사용한다.
|
|
453
|
-
- `nhncloud instance keypair create <keypair-name> -o <keyfile>` — NHN 이 키쌍을 생성하고 private_key 를 `<keyfile>` 에 mode 0600 으로 저장한다.
|
|
454
|
-
**private_key 는 생성 시 한 번만 받을 수 있으므로** 자동화에서는 항상 `-o` 로 저장한다.
|
|
455
|
-
- `--public-key <path|key>` 로 기존 공개키를 등록하면 private_key 는 반환되지 않는다.
|
|
456
|
-
- `nhncloud instance keypair delete <keypair-name>` — 삭제.
|
|
457
|
-
|
|
458
|
-
### instance flavors 조회
|
|
459
|
-
|
|
460
|
-
- `nhncloud instance flavors` — 인스턴스 타입 id·name 목록.
|
|
461
|
-
create 의 `--flavor` 에 넣을 id 를 고를 때 사용한다.
|
|
462
|
-
- `--detail` 로 vcpus·ram(MB)·disk(GB) 스펙을 확인한다.
|
|
463
|
-
테이블은 핵심 5컬럼이며, is_public·extra_specs 등 나머지 필드는 `--json` 으로 확인한다.
|
|
464
|
-
- `--min-disk <gb>` / `--min-ram <mb>` 로 조건에 맞는 타입만 필터한다.
|
|
465
|
-
|
|
466
|
-
### instance availability-zones 조회
|
|
467
|
-
|
|
468
|
-
- `nhncloud instance availability-zones` — 가용성 영역 목록(zoneName·available). 인스턴스 발급 가능한 영역을 확인할 때. (현재 `instance create` 에는 `--availability-zone` 옵션이 없다 — 영역 정보 참고용.)
|
|
469
|
-
- `available` 이 false 인 영역은 신규 발급이 막혀 있으니 true 인 영역을 참고한다.
|
|
470
|
-
- 전체 응답(zoneState 등)은 `--json` 으로 확인한다.
|
|
471
|
-
|
|
472
|
-
### instance create 옵션
|
|
473
|
-
|
|
474
|
-
| 옵션 | 필수 | 설명 |
|
|
475
|
-
|------|:---:|------|
|
|
476
|
-
| `--name <name>` | 예 | 인스턴스 이름 |
|
|
477
|
-
| `--flavor <id>` | 예 | flavor ID (CPU/메모리 사양. GPU 발급 시 GPU flavor ID 지정) |
|
|
478
|
-
| `--image <id>` | 예 | 이미지 ID |
|
|
479
|
-
| `--network <uuid>` | 예 | 네트워크 UUID (반복 지정으로 여러 개 가능) |
|
|
480
|
-
| `--boot-volume-size <gb>` | 조건부 | boot-from-volume root 볼륨 크기(GB). **GPU(g2) 등 일부 flavor 는 필수** (없으면 `Missing Block Device Mapping` 발급 실패). 미지정 시 로컬 디스크 부팅 |
|
|
481
|
-
| `--key-name <name>` | 아니오 | 키페어 이름 |
|
|
482
|
-
| `--security-group <name>` | 아니오 | 보안 그룹 이름 (반복 지정) |
|
|
483
|
-
| `--ephemeral-disk-size <gb>` | 아니오 | 임시 디스크 크기(GB, NHN 확장) |
|
|
484
|
-
| `--protect` | 아니오 | 삭제 방지 설정 (NHN 확장) |
|
|
485
|
-
| `--user-data <path>` | 아니오 | cloud-init user-data 파일 경로. base64 인코딩해 `user_data` 주입 (인코딩 후 65535 바이트 한도, 초과 시 입력 오류). 부팅 시 드라이버·패키지 자동 셋업에 사용 |
|
|
486
|
-
| `--wait` | 아니오 | ACTIVE 상태 + IP 할당까지 대기 |
|
|
487
|
-
| `--timeout <sec>` | 아니오 | wait 타임아웃 (초, 기본 300) |
|
|
488
|
-
| `--region <region>` | 아니오 | region override (kr1/kr2/kr3/jp1) |
|
|
489
|
-
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
490
|
-
|
|
491
|
-
### 체이닝 예시
|
|
492
|
-
|
|
493
|
-
```bash
|
|
494
|
-
# 1. 인스턴스 생성 후 ACTIVE + IP 대기 → IP 추출 → SSH 접속
|
|
495
|
-
IP=$(nhncloud instance create \
|
|
496
|
-
--name ci-runner \
|
|
497
|
-
--flavor <flavor-id> \
|
|
498
|
-
--image <image-id> \
|
|
499
|
-
--network <network-uuid> \
|
|
500
|
-
--wait --quiet)
|
|
501
|
-
ssh ubuntu@"$IP" "echo ready"
|
|
502
|
-
|
|
503
|
-
# 2. --wait --json 으로 전체 필드 취득 후 jq 로 IP 파싱
|
|
504
|
-
nhncloud instance create \
|
|
505
|
-
--name ci-runner \
|
|
506
|
-
--flavor <flavor-id> \
|
|
507
|
-
--image <image-id> \
|
|
508
|
-
--network <network-uuid> \
|
|
509
|
-
--wait --json | jq -r '.addresses | to_entries[0].value[0].addr'
|
|
510
|
-
|
|
511
|
-
# 3. 사용 후 삭제 (ephemeral CI 패턴)
|
|
512
|
-
nhncloud instance delete "$INSTANCE_ID" --yes
|
|
513
|
-
|
|
514
|
-
# 4. 목록에서 id 만 추출
|
|
515
|
-
nhncloud instance list --quiet
|
|
516
|
-
|
|
517
|
-
# 5. cloud-init 으로 부팅 시 셋업 자동화 (일회성 GPU CI 러너)
|
|
518
|
-
nhncloud instance create \
|
|
519
|
-
--name gpu-ci \
|
|
520
|
-
--flavor <gpu-flavor-id> \
|
|
521
|
-
--image <image-id> \
|
|
522
|
-
--network <network-uuid> \
|
|
523
|
-
--boot-volume-size 30 \
|
|
524
|
-
--user-data ./setup-nvidia-docker.yaml \
|
|
525
|
-
--wait --quiet
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
### instance 에러 코드
|
|
529
|
-
|
|
530
|
-
| 상황 | exit code |
|
|
531
|
-
|------|-----------|
|
|
532
|
-
| iaas 자격증명 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
533
|
-
| Keystone 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
534
|
-
| 미등록 region / 필수 옵션 누락 | 3 (PARAM_ERROR) |
|
|
535
|
-
| API 오류 / waitForActive 타임아웃 | 1 (API_ERROR) |
|
|
536
|
-
| 비대화형 delete 에서 --yes 미지정 | 3 (PARAM_ERROR) |
|
|
537
|
-
|
|
538
|
-
---
|
|
539
|
-
|
|
540
|
-
## network — VPC·서브넷 조회
|
|
541
|
-
|
|
542
|
-
`network` 명령군은 NHN VPC API 를 호출한다.
|
|
543
|
-
`instance` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유하므로 별도 설정이 필요 없다.
|
|
544
|
-
|
|
545
|
-
### 의도 → 커맨드 매핑
|
|
546
|
-
|
|
547
|
-
| 의도 | 커맨드 |
|
|
548
|
-
|------|--------|
|
|
549
|
-
| VPC 목록 조회 | `nhncloud network list` (전체 필드는 `--json`) |
|
|
550
|
-
| 서브넷 목록 조회 | `nhncloud network subnet list` |
|
|
551
|
-
| 다른 region VPC | `nhncloud network list --region kr2` |
|
|
552
|
-
| VPC id 를 instance create 에 사용 | `nhncloud instance create ... --network <network-uuid>` |
|
|
553
|
-
|
|
554
|
-
> **`--network` 가 받는 uuid**: `network list` 의 **VPC id** 를 그대로 사용한다 (subnet id 아님, 실측 확정).
|
|
555
|
-
> VPC id 를 `--quiet` 로 추출해 create 로 파이프하는 흐름을 지원한다.
|
|
556
|
-
|
|
557
|
-
### 체이닝 예시
|
|
558
|
-
|
|
559
|
-
```bash
|
|
560
|
-
# VPC id 한 줄씩 (--quiet)
|
|
561
|
-
nhncloud network list --quiet
|
|
562
|
-
|
|
563
|
-
# 서브넷 id·CIDR 확인
|
|
564
|
-
nhncloud network subnet list --json | jq '.[] | {id, cidr, vpc_id}'
|
|
565
|
-
|
|
566
|
-
# VPC 선택 후 인스턴스 생성
|
|
567
|
-
nhncloud instance create \
|
|
568
|
-
--name web \
|
|
569
|
-
--flavor <flavor-id> \
|
|
570
|
-
--image <image-id> \
|
|
571
|
-
--network <network-uuid> \
|
|
572
|
-
--wait --quiet
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
### network 에러 코드
|
|
576
|
-
|
|
577
|
-
| 상황 | exit code |
|
|
578
|
-
|------|-----------|
|
|
579
|
-
| iaas 자격증명 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
580
|
-
| Keystone 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
581
|
-
| 미등록 region | 3 (PARAM_ERROR) |
|
|
582
|
-
| VPC API 오류 | 1 (API_ERROR) |
|
|
583
|
-
|
|
584
|
-
---
|
|
585
|
-
|
|
586
|
-
## volume — Block Storage 볼륨 관리
|
|
587
|
-
|
|
588
|
-
`volume` 명령군은 NHN Block Storage (Cinder volumev2) API 를 호출한다.
|
|
589
|
-
`instance`·`network` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유하므로 별도 설정이 필요 없다.
|
|
590
|
-
|
|
591
|
-
> **쓰기 작업 주의**: `volume create`, `instance volume attach`, `instance volume detach` 는 쓰기 작업이다.
|
|
592
|
-
> 실행 전 환경을 확인한다(수동 QA 필수).
|
|
593
|
-
|
|
594
|
-
### 의도 → 커맨드 매핑
|
|
595
|
-
|
|
596
|
-
| 의도 | 커맨드 |
|
|
597
|
-
|------|--------|
|
|
598
|
-
| 볼륨 목록 조회 | `nhncloud volume list` |
|
|
599
|
-
| 정렬·페이지네이션 | `nhncloud volume list --sort created_at:desc --limit 20` |
|
|
600
|
-
| 단일 볼륨 상세 조회 | `nhncloud volume get <volume-id>` |
|
|
601
|
-
| 볼륨 생성 (⚠️ 쓰기) | `nhncloud volume create --size <gb>` |
|
|
602
|
-
| 이름·타입 지정 생성 (⚠️ 쓰기) | `nhncloud volume create --size 50 --name my-volume --volume-type "General SSD"` |
|
|
603
|
-
| 인스턴스 연결 볼륨 목록 | `nhncloud instance volumes <instance-id>` |
|
|
604
|
-
| 볼륨 연결 (⚠️ 쓰기) | `nhncloud instance volume attach <instance-id> --volume <volume-id>` |
|
|
605
|
-
| 볼륨 연결 해제 (⚠️ 쓰기) | `nhncloud instance volume detach <instance-id> <volume-id>` |
|
|
606
|
-
| 다른 region | `nhncloud volume list --region kr2` |
|
|
607
|
-
|
|
608
|
-
> **UX 비대칭**: `attach` 는 `--volume <id>` 플래그로 볼륨을 지정하고,
|
|
609
|
-
> `detach` 는 `<instanceId> <volumeId>` 위치 인수 두 개로 지정한다.
|
|
610
|
-
|
|
611
|
-
### volume list 옵션
|
|
612
|
-
|
|
613
|
-
| 옵션 | 필수 | 설명 |
|
|
614
|
-
|------|:---:|------|
|
|
615
|
-
| `--sort <field:dir>` | 아니오 | 정렬 (예: `created_at:desc`) |
|
|
616
|
-
| `--limit <n>` | 아니오 | 최대 반환 건수 |
|
|
617
|
-
| `--offset <n>` | 아니오 | 오프셋 |
|
|
618
|
-
| `--marker <id>` | 아니오 | 페이지네이션 marker |
|
|
619
|
-
| `--region <region>` | 아니오 | region override (kr1/kr2/kr3/jp1) |
|
|
620
|
-
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
621
|
-
|
|
622
|
-
### volume create 옵션
|
|
623
|
-
|
|
624
|
-
| 옵션 | 필수 | 설명 |
|
|
625
|
-
|------|:---:|------|
|
|
626
|
-
| `--size <gb>` | 예 | 볼륨 크기(GB) |
|
|
627
|
-
| `--name <name>` | 아니오 | 볼륨 이름 |
|
|
628
|
-
| `--description <text>` | 아니오 | 볼륨 설명 |
|
|
629
|
-
| `--volume-type <type>` | 아니오 | 볼륨 타입 (예: `General SSD`) |
|
|
630
|
-
| `--snapshot-id <id>` | 아니오 | 스냅샷 ID (스냅샷으로부터 생성) |
|
|
631
|
-
| `--region <region>` | 아니오 | region override |
|
|
632
|
-
| `--profile <name>` | 아니오 | 사용할 profile 이름 |
|
|
633
|
-
|
|
634
|
-
### volume 에러 코드
|
|
635
|
-
|
|
636
|
-
| 상황 | exit code |
|
|
637
|
-
|------|-----------|
|
|
638
|
-
| iaas 자격증명 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
639
|
-
| Keystone 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
640
|
-
| 미등록 region / 필수 옵션 누락 | 3 (PARAM_ERROR) |
|
|
641
|
-
| Block Storage API 오류 | 1 (API_ERROR) |
|
|
642
|
-
|
|
643
|
-
---
|
|
644
|
-
|
|
645
|
-
## floatingip — 공인 IP(Floating IP) 관리
|
|
646
|
-
|
|
647
|
-
인스턴스에 공인 IP 를 부여하거나 회수한다.
|
|
648
|
-
`floatingip` 명령군은 `network` 와 같은 `iaas` 자격증명·Keystone 토큰을 공유한다.
|
|
649
|
-
|
|
650
|
-
> **쓰기 작업 주의**: `floatingip create`(공인 IP 발급·비용)·`floatingip delete`(IP 회수)는 쓰기 작업이다.
|
|
651
|
-
> 실행 전 환경을 확인한다(수동 QA 필수).
|
|
652
|
-
|
|
653
|
-
### 의도 → 커맨드 매핑
|
|
654
|
-
|
|
655
|
-
| 의도 | 커맨드 |
|
|
656
|
-
|------|--------|
|
|
657
|
-
| Floating IP 목록 조회 | `nhncloud floatingip list` |
|
|
658
|
-
| Floating IP 발급 (외부 VPC 자동) | `nhncloud floatingip create` |
|
|
659
|
-
| 특정 외부 VPC 로 발급 | `nhncloud floatingip create --network <network-uuid>` |
|
|
660
|
-
| Floating IP 삭제 (⚠️ 쓰기) | `nhncloud floatingip delete <floatingip-id> --yes` |
|
|
661
|
-
|
|
662
|
-
> **associate 보류**: `floatingip associate` (인스턴스 연결) 는 instance→port_id 매핑 경로 미확정으로 보류 중.
|
|
663
|
-
> 후속 task 에서 실측 확정 후 추가한다.
|
|
664
|
-
|
|
665
|
-
### 체이닝 예시
|
|
666
|
-
|
|
667
|
-
```bash
|
|
668
|
-
# Floating IP 목록 (id·공인 IP·상태·연결 port 확인)
|
|
669
|
-
nhncloud floatingip list
|
|
670
|
-
|
|
671
|
-
# 발급 후 id 추출
|
|
672
|
-
nhncloud floatingip create --quiet
|
|
673
|
-
|
|
674
|
-
# JSON 으로 발급 정보 확인
|
|
675
|
-
nhncloud floatingip create --json | jq '{id, floating_ip_address, status}'
|
|
676
|
-
|
|
677
|
-
# 삭제 (비대화형 환경)
|
|
678
|
-
nhncloud floatingip delete <floatingip-id> --yes
|
|
679
|
-
```
|
|
680
|
-
|
|
681
|
-
### floatingip 에러 코드
|
|
682
|
-
|
|
683
|
-
| 상황 | exit code |
|
|
684
|
-
|------|-----------|
|
|
685
|
-
| iaas 자격증명 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
686
|
-
| Keystone 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
687
|
-
| 외부 네트워크 미발견 (create --network 미지정) | 3 (PARAM_ERROR) |
|
|
688
|
-
| 비대화형 delete --yes 누락 | 3 (PARAM_ERROR) |
|
|
689
|
-
| Floating IP API 오류 | 1 (API_ERROR) |
|
|
690
|
-
|
|
691
|
-
## ncr — NHN Container Registry 레지스트리·이미지·태그 조회
|
|
692
|
-
|
|
693
|
-
NCR Management API 로 레지스트리(Harbor 프로젝트)를 조회한다.
|
|
694
|
-
이미지(repository)·태그는 레지스트리 데이터플레인 Harbor REST API 를 직접 호출한다.
|
|
695
|
-
두 경로 모두 공통 UAK 를 사용하므로 추가 설정은 없다.
|
|
696
|
-
appKey 는 `--app-key` 옵션 또는 `nhncloud configure --ncr-appkey <appkey>` 로 profile 에 저장한 값을 자동 사용한다.
|
|
697
|
-
|
|
698
|
-
### 의도 → 커맨드 매핑
|
|
699
|
-
|
|
700
|
-
| 의도 | 커맨드 |
|
|
701
|
-
|------|--------|
|
|
702
|
-
| 레지스트리 목록 조회 | `nhncloud ncr list --app-key <appkey>` |
|
|
703
|
-
| 레지스트리 목록 (JSON) | `nhncloud ncr list --app-key <appkey> --json` |
|
|
704
|
-
| 다른 region 조회 (기본 kr1) | `nhncloud ncr list --region kr2 --app-key <appkey>` |
|
|
705
|
-
| 단일 레지스트리 조회 | `nhncloud ncr get <registry> --app-key <appkey>` |
|
|
706
|
-
| appkey 저장 후 생략 | `nhncloud configure --ncr-appkey <appkey>` → `nhncloud ncr list` |
|
|
707
|
-
| 이미지(repository) 목록 조회 | `nhncloud ncr images <registry>` |
|
|
708
|
-
| 이미지 목록 (JSON) | `nhncloud ncr images <registry> --json` |
|
|
709
|
-
| 특정 이미지의 태그 목록 조회 | `nhncloud ncr tags <registry> <repository>` |
|
|
710
|
-
| 태그 목록 (JSON) | `nhncloud ncr tags <registry> <repository> --json` |
|
|
711
|
-
|
|
712
|
-
### ncr list / get 옵션
|
|
713
|
-
|
|
714
|
-
| 옵션 | 설명 |
|
|
715
|
-
|------|------|
|
|
716
|
-
| `--region <region>` | NCR region (기본: `kr1`). 지원: `kr1`, `kr2`, `kr3` |
|
|
717
|
-
| `--app-key <key>` | NCR appKey (profile 의 `ncr.appkey` 보다 우선) |
|
|
718
|
-
| `--profile <name>` | 사용할 profile 이름 |
|
|
719
|
-
|
|
720
|
-
### ncr images / ncr tags 옵션
|
|
721
|
-
|
|
722
|
-
| 옵션 | 설명 |
|
|
723
|
-
|------|------|
|
|
724
|
-
| `--region <region>` | NCR region (기본: `kr1`) |
|
|
725
|
-
| `--app-key <key>` | NCR appKey (profile 의 `ncr.appkey` 보다 우선) |
|
|
726
|
-
| `--profile <name>` | 사용할 profile 이름 |
|
|
727
|
-
|
|
728
|
-
### 체이닝 예시
|
|
729
|
-
|
|
730
|
-
```bash
|
|
731
|
-
# 레지스트리 목록 (이름만 추출)
|
|
732
|
-
nhncloud ncr list --app-key <appkey> --json | jq -r '.[].name'
|
|
733
|
-
|
|
734
|
-
# 레지스트리 수 확인
|
|
735
|
-
nhncloud ncr list --app-key <appkey> --json | jq length
|
|
736
|
-
|
|
737
|
-
# 단일 레지스트리 상세 조회
|
|
738
|
-
nhncloud ncr get <registry> --app-key <appkey> --json
|
|
739
|
-
|
|
740
|
-
# 이미지 목록 (이름만 추출)
|
|
741
|
-
nhncloud ncr images <registry> --json | jq -r '.[].repository'
|
|
742
|
-
|
|
743
|
-
# 이미지별 artifact 수 확인
|
|
744
|
-
nhncloud ncr images <registry> --json | jq '.[] | {repository, artifact_count}'
|
|
745
|
-
|
|
746
|
-
# 특정 이미지의 태그 목록
|
|
747
|
-
nhncloud ncr tags <registry> <repository> --json | jq -r '.[].tag'
|
|
748
|
-
|
|
749
|
-
# 가장 최근 push 태그 확인
|
|
750
|
-
nhncloud ncr tags <registry> <repository> --json | jq 'sort_by(.push_time) | last | .tag'
|
|
751
|
-
```
|
|
752
|
-
|
|
753
|
-
### ncr 에러 코드
|
|
754
|
-
|
|
755
|
-
| 상황 | exit code |
|
|
756
|
-
|------|-----------|
|
|
757
|
-
| UAK 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
758
|
-
| NCR appkey 미설정 (`--app-key` 미지정 + configure 미설정) | 4 (CONFIG_ERROR) |
|
|
759
|
-
| 지원하지 않는 region | 3 (PARAM_ERROR) |
|
|
760
|
-
| registry / repository 인수 공백·빈값 | 3 (PARAM_ERROR) |
|
|
761
|
-
| UAK 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
762
|
-
| NCR API 오류 | 1 (API_ERROR) |
|
|
763
|
-
|
|
764
|
-
## nks — NHN Kubernetes Service 관리
|
|
765
|
-
|
|
766
|
-
NKS는 `iaas` 자격증명으로 Keystone 토큰을 발급하고 `container-infra` API를 호출한다.
|
|
767
|
-
AI 에이전트는 조회 작업에 `--json`을 우선 사용한다.
|
|
768
|
-
지원 region은 `kr1`, `kr2`, `kr3` 이다.
|
|
769
|
-
|
|
770
|
-
### 조회 시나리오
|
|
771
|
-
|
|
772
|
-
| 의도 | 커맨드 |
|
|
773
|
-
|------|--------|
|
|
774
|
-
| 지원 Kubernetes version / event type 확인 | `nhncloud nks supports --json` |
|
|
775
|
-
| 클러스터 목록 조회 | `nhncloud nks cluster list --json` |
|
|
776
|
-
| 클러스터 상세 조회 | `nhncloud nks cluster get <cluster> --json` |
|
|
777
|
-
| 작업 이력 조회 | `nhncloud nks cluster events <cluster> --json` |
|
|
778
|
-
| 작업 이력 단건 조회 | `nhncloud nks cluster event <cluster> <event> --json` |
|
|
779
|
-
| API endpoint IP ACL 조회 | `nhncloud nks cluster ipacl <cluster> --json` |
|
|
780
|
-
| kubeconfig stdout 출력 | `nhncloud nks cluster kubeconfig <cluster>` |
|
|
781
|
-
| kubeconfig 파일 저장 | `nhncloud nks cluster kubeconfig <cluster> --output ./kubeconfig` |
|
|
782
|
-
| 노드 그룹 목록 조회 | `nhncloud nks nodegroup list <cluster> --json` |
|
|
783
|
-
| 노드 그룹 autoscale 조회 | `nhncloud nks nodegroup autoscale <cluster> <nodegroup> --json` |
|
|
784
|
-
| 애드온 타입 조회 | `nhncloud nks addon-type list --json` |
|
|
785
|
-
| 애드온 타입 단건 조회 | `nhncloud nks addon-type get <addon-type> --json` |
|
|
786
|
-
| 설치 가능 애드온 조회 | `nhncloud nks addon list --k8s-version v1.30.1 --json` |
|
|
787
|
-
| 설치 가능 애드온 단건 조회 | `nhncloud nks addon get <addon> --json` |
|
|
788
|
-
| 클러스터 설치 애드온 조회 | `nhncloud nks cluster addon list <cluster> --json` |
|
|
789
|
-
| 클러스터 설치 애드온 단건 조회 | `nhncloud nks cluster addon get <cluster> <addon> --json` |
|
|
790
|
-
|
|
791
|
-
### 쓰기 시나리오
|
|
792
|
-
|
|
793
|
-
복잡한 생성·변경 작업은 공식 API payload를 JSON 파일로 전달한다.
|
|
794
|
-
삭제·제거 명령은 비대화형 환경에서 `--yes` 가 필요하다.
|
|
795
|
-
payload 원문에는 appkey 같은 민감값이 들어갈 수 있으므로 로그에 출력하지 않는다.
|
|
796
|
-
|
|
797
|
-
```bash
|
|
798
|
-
# 생성
|
|
799
|
-
nhncloud nks cluster create --file ./cluster-create.json
|
|
800
|
-
nhncloud nks nodegroup create <cluster> --file ./nodegroup-create.json
|
|
801
|
-
|
|
802
|
-
# 클러스터 변경
|
|
803
|
-
nhncloud nks cluster resize <cluster> --nodegroup worker --node-count 3
|
|
804
|
-
nhncloud nks cluster set-ipacl <cluster> --file ./ipacl.json
|
|
805
|
-
nhncloud nks cluster renew-certificate <cluster> --term-of-validity 3
|
|
806
|
-
nhncloud nks cluster update-sgw <cluster> --ncr-sgw <uuid> --obs-sgw <uuid>
|
|
807
|
-
nhncloud nks cluster set-control-plane-log <cluster> --file ./control-plane-log.json
|
|
808
|
-
|
|
809
|
-
# 노드 그룹 변경
|
|
810
|
-
nhncloud nks nodegroup stop-node <cluster> worker --nodes node-1,node-2
|
|
811
|
-
nhncloud nks nodegroup start-node <cluster> worker --nodes node-1,node-2
|
|
812
|
-
nhncloud nks nodegroup set-autoscale <cluster> worker --file ./autoscale.json
|
|
813
|
-
nhncloud nks nodegroup set-metric-autoscale <cluster> worker --file ./metric-autoscale.json
|
|
814
|
-
nhncloud nks nodegroup upgrade <cluster> worker --version v1.30.1
|
|
815
|
-
nhncloud nks nodegroup set-userscript <cluster> worker --file ./userscript.sh
|
|
816
|
-
nhncloud nks nodegroup update-flavor <cluster> worker --flavor <flavor-uuid>
|
|
817
|
-
nhncloud nks nodegroup set-fip-auto-bind <cluster> worker --file ./fip-auto-bind.json
|
|
818
|
-
nhncloud nks nodegroup set-labels <cluster> worker --file ./labels.json
|
|
819
|
-
|
|
820
|
-
# 애드온 변경
|
|
821
|
-
nhncloud nks cluster addon install <cluster> \
|
|
822
|
-
--name coredns \
|
|
823
|
-
--version 1.0.0 \
|
|
824
|
-
--resolve-conflicts overwrite
|
|
825
|
-
|
|
826
|
-
nhncloud nks cluster addon update <cluster> coredns \
|
|
827
|
-
--version 1.0.1 \
|
|
828
|
-
--resolve-conflicts preserve
|
|
829
|
-
|
|
830
|
-
nhncloud nks cluster addon remove <cluster> coredns --yes
|
|
831
|
-
```
|
|
832
|
-
|
|
833
|
-
### nks 에러 코드
|
|
834
|
-
|
|
835
|
-
| 상황 | exit code |
|
|
836
|
-
|------|-----------|
|
|
837
|
-
| `iaas` 자격증명 누락·불완전 | 4 (CONFIG_ERROR) |
|
|
838
|
-
| Keystone 또는 NKS 인증 실패 (401/403) | 2 (AUTH_ERROR) |
|
|
839
|
-
| 지원하지 않는 NKS region | 3 (PARAM_ERROR) |
|
|
840
|
-
| payload JSON 파일 파싱 실패 | 3 (PARAM_ERROR) |
|
|
841
|
-
| 위험 명령에서 비대화형 `--yes` 누락 | 3 (PARAM_ERROR) |
|
|
842
|
-
| NKS API 오류 / 응답 형식 불일치 | 1 (API_ERROR) |
|
|
44
|
+
## 주요 명령군
|
|
45
|
+
|
|
46
|
+
| 명령군 | 용도 |
|
|
47
|
+
|--------|------|
|
|
48
|
+
| `configure` | 자격증명 설정 마법사와 비대화형 profile 저장 |
|
|
49
|
+
| `logncrash` | 로그 검색, 대량 export, collector 전송 |
|
|
50
|
+
| `deploy` | NHN Cloud Deploy 실행과 배포/바이너리 조회·전송 |
|
|
51
|
+
| `instance` | Compute 인스턴스, flavor, image, keypair, volume attach 관리 |
|
|
52
|
+
| `network` | VPC와 subnet 조회 |
|
|
53
|
+
| `volume` | Block Storage volume 조회·생성 |
|
|
54
|
+
| `floatingip` | Floating IP 조회·발급·삭제 |
|
|
55
|
+
| `ncr` | Container Registry registry/image/tag 조회 |
|
|
56
|
+
| `nks` | Kubernetes cluster/nodegroup/addon/kubeconfig 관리 |
|
|
57
|
+
| `ncs` | Container Service template/workload 조회·생성·변경·실행제어, malware 검사 설정·결과 조회 |
|
|
58
|
+
|
|
59
|
+
## 안전한 탐색 순서
|
|
60
|
+
|
|
61
|
+
1. [common.md](references/common.md)에서 profile과 출력 모드를 확인한다.
|
|
62
|
+
2. 대상 서비스 reference를 읽는다.
|
|
63
|
+
3. 조회/discovery 명령을 `--json`으로 먼저 실행한다.
|
|
64
|
+
4. 쓰기 명령은 대상 id, region, profile, `--yes`, payload file을 명시한다.
|
|
65
|
+
5. 실패하면 [troubleshooting.md](references/troubleshooting.md)의 exit code와 서비스별 인증 모델을 대조한다.
|