@bifos/nhncloud-cli 0.14.0 → 0.16.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bifos/nhncloud-cli",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "description": "CLI tool for NHN Cloud services — AI agent & terminal friendly",
5
5
  "keywords": [
6
6
  "nhncloud",
@@ -20,7 +20,7 @@ description: >-
20
20
  5. 결과는 stdout의 구조화 데이터로 판정하고 stderr는 진행 상황과 진단에 사용한다.
21
21
  6. 실패하면 [troubleshooting.md](references/troubleshooting.md)에서 종료 코드와 인증 모델을 확인한다.
22
22
 
23
- `--quiet`는 해당 명령이 식별자 출력을 문서화한 경우에만 사용한다.
23
+ `--quiet`는 해당 명령이 핵심 값 한 줄 출력을 문서화한 경우에만 사용한다.
24
24
  명령 문법이나 응답 형태를 추측하지 않는다.
25
25
  비밀값과 실제 사용자 리소스 ID는 문서·이슈·보고서에 남기지 않고 placeholder로 바꾼다.
26
26
 
@@ -30,7 +30,7 @@ description: >-
30
30
  |---|---|
31
31
  | CLI 설치, `configure`, profile, 출력 모드, 명령 카탈로그, 종료 코드 | [common.md](references/common.md) |
32
32
  | 공개 스킬 상태 확인·설치·갱신·제거와 상태별 복구 | [common.md](references/common.md) |
33
- | Log & Crash Search v3 커서 검색·scroll 대량 추출·collector 전송 | [logncrash.md](references/logncrash.md) |
33
+ | Log & Crash Search v3 커서 검색·scroll 대량 추출·collector 전송<br>반복 조회 자동화의 호출 비용 설계 | [logncrash.md](references/logncrash.md) |
34
34
  | Deploy 실행·조회·바이너리 전송 | [deploy.md](references/deploy.md) |
35
35
  | Compute, VPC, Block Storage, Floating IP | [iaas.md](references/iaas.md) |
36
36
  | Load Balancer와 IP ACL | [loadbalancer.md](references/loadbalancer.md) |
@@ -141,7 +141,7 @@ profile 해석 순서:
141
141
  |--------|------|------|
142
142
  | 없음 | 사람이 읽기 좋은 table | 터미널 확인 |
143
143
  | `--json` | JSON stdout | 파싱, 자동화, AI 에이전트 |
144
- | `--quiet` | 핵심 식별자만 stdout | 단순 체이닝 |
144
+ | `--quiet` | 명령이 문서화한 핵심 값 한 줄을 stdout으로 출력 | 단순 체이닝 |
145
145
 
146
146
  `--json`은 CLI 출력 계약이다.
147
147
  API 원본 wrapper를 항상 보존하지 않는다.
@@ -250,6 +250,6 @@ NKS 쓰기 명령 중 생성, resize, 설정 변경, 노드 action, 애드온
250
250
 
251
251
  - 조회는 먼저 `--json`으로 실행하고 필요한 id를 추출한다.
252
252
  - 쓰기 명령 전에 `--profile`, `--region`, 대상 id를 명시한다.
253
- - `--quiet`는 해당 명령이 식별자 출력을 문서화한 경우에만 사용한다.
253
+ - `--quiet`는 해당 명령이 핵심 값 한 줄 출력을 문서화한 경우에만 사용한다.
254
254
  - 삭제 명령은 비대화형 환경에서 `--yes`를 명시한다.
255
255
  - stdout은 데이터로만 취급하고, 진행 메시지는 stderr로 분리된다고 가정한다.
@@ -6,49 +6,42 @@ UAK를 OAuth `client_credentials`로 교환한 Bearer token으로 인증하고,
6
6
  ## 설정
7
7
 
8
8
  `~/.nhncloud/credentials.json`에 profile 공통 `userAccessKey`가 필요하다.
9
+ appkey는 `nhncloud configure --deploy-appkey <key>`로 profile에 설정한다.
9
10
  `nhncloud configure` 사용을 권장한다.
10
11
 
11
- `~/.nhncloud/config.json`에는 named deploy target을 둔다.
12
+ 배포 좌표(아티팩트·서버그룹·시나리오 등)는 config에 두지 않는다.
13
+ 매 호출마다 명령 옵션으로 넘긴다.
14
+ 반복되는 값은 호출하는 쪽의 스크립트나 CI 변수가 관리한다.
12
15
 
13
- Discovery:
16
+ **여러 배포 대상을 쓰려면 profile 을 나눈다.**
17
+ profile 하나에 appkey 하나다.
14
18
 
15
19
  ```bash
16
- nhncloud commands --json | jq '.commands[] | select(.path|startswith("deploy"))'
20
+ nhncloud configure --profile projA --deploy-appkey <keyA>
21
+ nhncloud deploy run --profile projA --artifact-id <id> --server-group-id <id> --scenario-ids <ids>
17
22
  ```
18
23
 
19
- ```json
20
- {
21
- "version": 1,
22
- "defaultProfile": "default",
23
- "deploy": {
24
- "targets": {
25
- "my-service": {
26
- "appKey": "<appKey>",
27
- "artifactId": "<artifactId>",
28
- "serverGroupId": "<serverGroupId>",
29
- "scenarioIds": "<id1,id2>"
30
- }
31
- }
32
- }
33
- }
24
+ 구버전에서 쓰던 config.json 의 이름 붙은 배포 대상 설정이 남아 있으면 경고가 나오며 읽지 않는다.
25
+
26
+ Discovery:
27
+
28
+ ```bash
29
+ nhncloud commands --json | jq '.commands[] | select(.path|startswith("deploy"))'
34
30
  ```
35
31
 
36
32
  ## 배포 실행
37
33
 
38
34
  ```bash
39
- nhncloud deploy run my-service
40
- nhncloud deploy run my-service --async
41
- nhncloud deploy run my-service --target-hosts <host1,host2>
35
+ nhncloud deploy run --artifact-id <id> --server-group-id <id> --scenario-ids <id1,id2>
36
+ nhncloud deploy run --artifact-id <id> --server-group-id <id> --scenario-ids <id1,id2> --async
37
+ nhncloud deploy run --artifact-id <id> --server-group-id <id> --scenario-ids <id1,id2> --target-hosts <host1,host2>
42
38
  ```
43
39
 
44
- `<target>`은 config의 deploy target 이름이다.
45
-
46
40
  | 옵션 | 설명 |
47
41
  |------|------|
48
- | `--app-key <k>` | target의 appKey override |
49
- | `--artifact-id <id>` | target의 artifactId override |
50
- | `--server-group-id <id>` | target의 serverGroupId override |
51
- | `--scenario-ids <csv>` | target의 scenarioIds override |
42
+ | `--artifact-id <id>` | 배포할 아티팩트 ID (`artifacts`로 확인) |
43
+ | `--server-group-id <id>` | 배포 대상 서버그룹 ID (`server-groups`로 확인) |
44
+ | `--scenario-ids <csv>` | 실행할 시나리오 ID 목록 (쉼표 구분) |
52
45
  | `--target-hosts <csv>` | 대상 호스트. 생략 시 서버그룹 전체 |
53
46
  | `--concurrent <n>` | 병렬 배포 수. 기본 1 |
54
47
  | `--next-when-fail` | 시나리오 실패 시에도 진행 |
@@ -62,22 +55,22 @@ nhncloud deploy run my-service --target-hosts <host1,host2>
62
55
  ## 조회 명령
63
56
 
64
57
  ```bash
65
- nhncloud deploy artifacts my-service --json
66
- nhncloud deploy server-groups my-service --json
67
- nhncloud deploy histories my-service --json
68
- nhncloud deploy binary-groups my-service --json
69
- nhncloud deploy binaries my-service --binary-group <key> --json
58
+ nhncloud deploy artifacts --json
59
+ nhncloud deploy server-groups --artifact-id <id> --json
60
+ nhncloud deploy histories --artifact-id <id> --json
61
+ nhncloud deploy binary-groups --artifact-id <id> --json
62
+ nhncloud deploy binaries --binary-group <key> --artifact-id <id> --json
70
63
  ```
71
64
 
72
65
  의도별 명령:
73
66
 
74
67
  | 의도 | 명령 |
75
68
  |------|------|
76
- | 아티팩트 목록 | `deploy artifacts <target>` |
77
- | 서버그룹 목록 | `deploy server-groups <target>` |
78
- | 배포 이력 | `deploy histories <target>` |
79
- | 바이너리 그룹 목록 | `deploy binary-groups <target>` |
80
- | 바이너리 목록 | `deploy binaries <target> --binary-group <key>` |
69
+ | 아티팩트 목록 | `deploy artifacts` |
70
+ | 서버그룹 목록 | `deploy server-groups --artifact-id <id>` |
71
+ | 배포 이력 | `deploy histories --artifact-id <id>` |
72
+ | 바이너리 그룹 목록 | `deploy binary-groups --artifact-id <id>` |
73
+ | 바이너리 목록 | `deploy binaries --binary-group <key> --artifact-id <id>` |
81
74
 
82
75
  `deploy binary-groups --json`은 `binaryGroups` wrapper를 언랩한 배열이다.
83
76
  `deploy binaries --json`은 `{ totalCount, binaries }` 객체다.
@@ -85,8 +78,8 @@ nhncloud deploy binaries my-service --binary-group <key> --json
85
78
  ## 바이너리 전송
86
79
 
87
80
  ```bash
88
- nhncloud deploy upload <target> --file ./app.tgz --binary-group <key>
89
- nhncloud deploy download <target> --binary-group <key> --binary-key <key> -o ./app.tgz
81
+ nhncloud deploy upload --artifact-id <id> --file ./app.tgz --binary-group <key>
82
+ nhncloud deploy download --artifact-id <id> --binary-group <key> --binary-key <key> -o ./app.tgz
90
83
  ```
91
84
 
92
85
  `upload`는 multipart로 로컬 파일을 업로드한다.
@@ -98,15 +91,19 @@ nhncloud deploy download <target> --binary-group <key> --binary-key <key> -o ./a
98
91
  ## 체이닝 예시
99
92
 
100
93
  ```bash
101
- nhncloud deploy artifacts my-service --json | jq -r '.[0].artifactId'
102
- nhncloud deploy run my-service --artifact-id <artifactId>
103
- nhncloud deploy histories my-service --json | jq '.[0] | {deployKey, deployStatus}'
94
+ nhncloud deploy artifacts --json | jq -r '.[0].artifactId'
95
+ nhncloud deploy run --artifact-id <artifactId> --server-group-id <id> --scenario-ids <ids>
96
+ nhncloud deploy histories --artifact-id <id> --json | jq '.[0] | {deployKey, deployStatus}'
104
97
  ```
105
98
 
106
99
  ## 에러 코드
107
100
 
108
101
  | 상황 | exit code |
109
102
  |------|-----------|
110
- | UAK 누락 또는 config target 없음 | 4 또는 3 |
103
+ | UAK 누락 또는 profile에 deploy appkey 없음 | 4 |
104
+ | 필수 옵션 누락(좌표, `--binary-group`·`--binary-key`·`--file`·`-o`) | 3 |
111
105
  | OAuth 인증 실패 | 2 |
112
106
  | Deploy API 오류 또는 봉투 실패 | 1 |
107
+
108
+ 필수 옵션 누락은 검증 방식과 관계없이 종료 코드 3으로 끝난다.
109
+ Commander의 조기 검증과 명령 내부 검증은 오류 문구가 다를 수 있지만 자동화는 같은 입력 오류로 처리할 수 있다.
@@ -1,8 +1,8 @@
1
1
  # Log & Crash Reference
2
2
 
3
- `logncrash` 명령군은 Log & Crash Search v3 커서 검색, scroll export, collector 전송을 다룬다.
3
+ `logncrash` 명령군은 Log & Crash Search v3 조회 토큰 확인, 커서 검색, scroll export, collector 전송을 다룬다.
4
4
 
5
- 검색과 export에는 profile의 logncrash appkey와 공통 UAK가 필요하다.
5
+ 조회 토큰 확인, 검색과 export에는 profile의 logncrash appkey와 공통 UAK가 필요하다.
6
6
  CLI가 UAK를 OAuth 토큰으로 교환해 Bearer 인증을 적용한다.
7
7
  `send`는 별도 collector 계약이므로 Search v3 전환의 영향을 받지 않는다.
8
8
 
@@ -96,17 +96,67 @@ cursor는 파싱하거나 인코딩을 바꾸지 않고 받은 문자열 그대
96
96
  이 응답은 HTTP 200에 봉투 오류로 오며 500과는 다른 원인이다.
97
97
  CLI는 둘을 구분해 안내한다.
98
98
 
99
- ```text
100
- 조회 횟수 제한에 걸렸습니다. 시간을 두고 다시 실행하세요. 검색 기간을 좁혀도 풀리지 않습니다.
99
+ 검색 전에는 남은 조회 토큰을 직접 확인할 수 있다.
100
+
101
+ ```bash
102
+ nhncloud logncrash available-token
103
+ nhncloud logncrash available-token --json
104
+ nhncloud logncrash available-token --quiet
101
105
  ```
102
106
 
103
- **검색 기간을 좁히는 것은 해법이 아니다.**
104
- 호출 한 번의 비용이 조회 기간에 거의 비례하지 않기 때문이다.
105
- 같은 구간을 여러 창으로 나누면 오히려 제한을 더 빨리 소모한다.
106
- 시간을 두고 다시 실행해야 한다.
107
+ 기본 출력은 남은 조회 토큰과 양수가 될 때까지의 추정 대기 시간을 표로 보여 준다.
108
+ `--json`은 `{ availableToken, estimatedWaitSeconds }`를 출력하고, `--quiet`은 `availableToken` 숫자만 출력한다.
109
+ 잔량이 양수이면 `estimatedWaitSeconds`는 `null`이다.
110
+
111
+ `search`와 `export`는 실제 검색 요청마다 먼저 잔량을 확인한다.
112
+ 잔량이 0 이하면 검색 요청을 보내지 않고 종료 코드 1로 끝낸다.
113
+ 추정 대기 시간은 관측한 회복 속도 1.6 token/s로 잔량이 양수가 될 때까지를 계산한 값이다.
114
+ 서버가 보장한 값이 아니며, 같은 프로젝트의 다른 호출이 잔량을 쓰면 달라질 수 있다.
115
+
116
+ 잔량이 양수여도 다음 검색의 비용까지 충분하다는 뜻은 아니다.
117
+ 호출 비용을 사전에 계산할 공식 규칙이 없고, 성공한 한 번의 호출이 잔량을 음수로 만들 수 있다.
118
+ 잔량 조회가 실패하면 CLI는 검색을 강행하지 않고 그 오류로 끝난다.
119
+
120
+ **검색 기간만 좁히는 것을 보장된 해법으로 보지 않는다.**
121
+ 공식 가이드는 기간, 크기와 쿼리 복잡도가 함께 비용에 영향을 준다고 설명하지만 산정식은 공개하지 않는다.
122
+ 기간을 나누면 한 호출의 비용이 줄 수 있지만 호출 수가 늘어난다.
123
+ `available-token`의 추정 시간을 확인한 뒤 사용자가 다시 실행해야 한다.
107
124
 
108
125
  CLI는 자동으로 다시 시도하지 않는다.
109
- 서버가 남은 시간을 알려주지 않아 얼마나 기다릴지 알 수 없고, 회복이 느려 대기가 실효를 갖기 어렵다.
126
+ 추정값은 서버 계약이 아니므로 CLI가 그 시간만큼 자동으로 기다리지는 않는다.
127
+
128
+ ### 반복 조회를 설계할 때
129
+
130
+ 주기적으로 로그를 수집하는 자동화라면 아래를 전제로 짠다.
131
+ 실패한 워크플로에서 되짚어 얻은 것이다.
132
+
133
+ **호출 비용을 이전 실측값으로 예측하지 않는다.**
134
+ 같은 프로젝트에서도 좁힌 쿼리의 비용이 호출당 약 85에서 약 21,870까지 다르게 관측됐다.
135
+ 쿼리와 기간은 필요한 데이터 범위에 맞추되, 다음 호출 전에 `available-token`을 다시 확인한다.
136
+
137
+ **전수 수집은 `search` 반복이 아니라 `export` 한 번이다.**
138
+ `search`를 페이지마다 부르면 호출 수가 페이지 수만큼 늘어난다.
139
+ `export`는 같은 양을 훨씬 적은 호출로 받고, 기간 재분할과 페이지 순회를 CLI가 처리한다.
140
+
141
+ **`--page`로 페이지네이션을 직접 만들지 않는다.**
142
+ Search v3에서 `--page`는 `0`만 받는다.
143
+ `1` 이상을 넘기면 입력 오류(종료 코드 3)로 거부되며, 이것은 시간이 지나도 풀리지 않는다.
144
+ 100건을 넘겨 받아야 하면 `export`를 쓴다.
145
+
146
+ **재시도할 때 오류를 구분한다.**
147
+ 조회 횟수 제한은 토큰 회복 뒤 다시 시도할 수 있고, 서버 500은 export의 기간 분할 대상이다.
148
+ 입력 오류와 설정 오류는 기다려도 풀리지 않는다.
149
+
150
+ | 종료 코드 | 의미 | 기다리면 풀리나 |
151
+ |---|---|---|
152
+ | 1 | API 오류, 봉투 실패 (조회 횟수 제한 포함) | 오류에 따라 다르다 |
153
+ | 2 | 인증 실패 | 아니다 |
154
+ | 3 | 입력 오류 | 아니다 |
155
+ | 4 | 설정 오류 | 아니다 |
156
+
157
+ **고정 간격 대신 매번 잔량을 확인한다.**
158
+ 호출 비용은 쿼리마다 다르고 한 번에 큰 음수로 내려갈 수 있다.
159
+ 짧은 고정 간격은 아직 회복하지 않은 상태에서 같은 실패만 반복할 수 있다.
110
160
 
111
161
  ## 대량 export
112
162
 
@@ -143,7 +193,7 @@ scroll 시작이나 계속 요청에서 서버가 500 응답을 반환하면 CLI
143
193
 
144
194
  ### 중단된 추출 이어받기
145
195
 
146
- 추출이 실패하면 `--output`은 만들어지지 않는다.
196
+ 조회가 끝나기 전에 추출이 실패하면 `--output`은 만들어지지 않는다.
147
197
  대신 그때까지 받은 결과가 `<output>.partial`에 남고, 위치와 이어받는 방법을 stderr로 알린다.
148
198
 
149
199
  ```text
@@ -159,6 +209,22 @@ scroll 시작이나 계속 요청에서 서버가 500 응답을 반환하면 CLI
159
209
 
160
210
  부분 결과를 남기지 못하면 CLI가 그 사실을 경고로 알리고 원래 오류를 그대로 낸다.
161
211
 
212
+ ### 조회 완료 뒤 복구 파일
213
+
214
+ 모든 데이터를 받은 뒤 로컬 파일 처리에 실패했다면 API를 다시 호출하지 않는다.
215
+ stderr에 나온 복구 경로로 전체 결과를 확인한다.
216
+
217
+ | 복구 파일 | 상태 | 처리 방법 |
218
+ |---|---|---|
219
+ | `<output>.<id>.complete` | 모든 데이터를 받고 파일 형식까지 완성했지만 최종 경로 교체에 실패 | API를 다시 호출하지 않고 원하는 최종 경로로 옮겨 그대로 사용 |
220
+ | `<output>.<id>.unfinalized` | 모든 데이터를 받았지만 JSON 배열 마무리에 실패 | API를 다시 호출하지 않고 마지막 `]`를 확인한 뒤, JSON 파싱이 성공하면 원하는 최종 경로로 이동 |
221
+
222
+ `<id>`는 실행별 고유값이다.
223
+ `.complete`와 `.unfinalized`는 앞선 복구 파일을 덮어쓰지 않고, 이후 실행이 성공해도 CLI가 자동으로 삭제하지 않는다.
224
+
225
+ 복구 경로로 옮기는 작업까지 실패하면 stderr가 임시 파일 경로를 알린다.
226
+ 먼저 그 임시 파일을 별도 경로에 보존한 뒤 형식을 확인한다.
227
+
162
228
  ## 로그 전송
163
229
 
164
230
  `logncrash send`는 collector host로 로그 한 건을 전송한다.
@@ -12,16 +12,15 @@ Management API는 공통 UAK 정적 헤더를 사용한다.
12
12
  nhncloud configure --uak-id <uak-id> --uak-secret <uak-secret> --ncr-appkey <appkey>
13
13
  ```
14
14
 
15
- `--app-key <key>`는 profile의 `ncr.appkey`보다 우선한다.
16
15
  기본 region은 `kr1`이고, `kr1`, `kr2`, `kr3`를 지원한다.
17
16
 
18
17
  ## Registry 조회
19
18
 
20
19
  ```bash
21
20
  nhncloud commands --json | jq '.commands[] | select(.path|startswith("ncr"))'
22
- nhncloud ncr list --app-key <appkey> --json
23
- nhncloud ncr list --region kr2 --app-key <appkey> --json
24
- nhncloud ncr get <registry> --app-key <appkey> --json
21
+ nhncloud ncr list --json
22
+ nhncloud ncr list --region kr2 --json
23
+ nhncloud ncr get <registry> --json
25
24
  ```
26
25
 
27
26
  `ncr list --json`은 `registries` wrapper를 언랩한 registry 배열이다.
@@ -40,8 +39,8 @@ nhncloud ncr tags <registry> <repository> --json
40
39
  ## 체이닝 예시
41
40
 
42
41
  ```bash
43
- nhncloud ncr list --app-key <appkey> --json | jq -r '.[].name'
44
- nhncloud ncr get <registry> --app-key <appkey> --json
42
+ nhncloud ncr list --json | jq -r '.[].name'
43
+ nhncloud ncr get <registry> --json
45
44
  nhncloud ncr images <registry> --json | jq -r '.[].repository'
46
45
  nhncloud ncr images <registry> --json | jq '.[] | {repository, artifact_count}'
47
46
  nhncloud ncr tags <registry> <repository> --json | jq -r '.[].tag'
@@ -53,7 +52,6 @@ nhncloud ncr tags <registry> <repository> --json | jq 'sort_by(.push_time) | las
53
52
  | 옵션 | 설명 |
54
53
  |------|------|
55
54
  | `--region <region>` | NCR region. 기본 `kr1` |
56
- | `--app-key <key>` | NCR appkey |
57
55
  | `--profile <name>` | 사용할 profile |
58
56
 
59
57
  ## 주의사항
@@ -8,23 +8,22 @@ template 의 생성·삭제, workload 의 생성·변경(update/patch)·실행
8
8
  공통 UAK와 NCS appkey가 필요하다.
9
9
  인증은 Deploy 와 같은 UAK OAuth Bearer 토큰을 재사용한다(profile 토큰 캐시 공유).
10
10
 
11
- `nhncloud configure` (대화형 또는 `--ncs-appkey`) 로 설정하거나, `--app-key` 옵션으로 직접 넘긴다.
11
+ `nhncloud configure` (대화형 또는 `--ncs-appkey`) 로 설정한다.
12
12
 
13
13
  ```bash
14
- nhncloud ncs template list --app-key <appkey>
14
+ nhncloud ncs template list
15
15
  ```
16
16
 
17
- `--app-key <key>`는 profile의 `ncs.appkey`보다 우선한다.
18
17
  기본 region은 `kr1`이고, `kr1`, `kr3`만 지원한다(판교·광주).
19
18
 
20
19
  ## Template(설계도) 조회
21
20
 
22
21
  ```bash
23
- nhncloud ncs template list --app-key <appkey> --json
24
- nhncloud ncs template list --region kr3 --app-key <appkey> --json
25
- nhncloud ncs template get <template-id> --app-key <appkey> --json
26
- nhncloud ncs template version list <template-id> --app-key <appkey> --json
27
- nhncloud ncs template version get <template-id> <version> --app-key <appkey> --json
22
+ nhncloud ncs template list --json
23
+ nhncloud ncs template list --region kr3 --json
24
+ nhncloud ncs template get <template-id> --json
25
+ nhncloud ncs template version list <template-id> --json
26
+ nhncloud ncs template version get <template-id> <version> --json
28
27
  ```
29
28
 
30
29
  ## Template(설계도) 생성/삭제
@@ -33,33 +32,33 @@ nhncloud ncs template version get <template-id> <version> --app-key <appkey> --j
33
32
  삭제는 위험 명령이라 비대화형 환경에서 `--yes` 가 필수이고, TTY 에서는 확인 프롬프트가 뜬다.
34
33
 
35
34
  ```bash
36
- nhncloud ncs template create --file ./template-create.json --app-key <appkey>
37
- nhncloud ncs template delete <template-id> --yes --app-key <appkey>
35
+ nhncloud ncs template create --file ./template-create.json
36
+ nhncloud ncs template delete <template-id> --yes
38
37
  ```
39
38
 
40
39
  버전 생성도 동일하게 `--file` 을 쓰며, payload 의 `sourceVersion` 필드가 필수다(어느 버전을 기준으로 새 버전을 만들지 지정).
41
40
 
42
41
  ```bash
43
- nhncloud ncs template version create <template-id> --file ./version-create.json --app-key <appkey>
44
- nhncloud ncs template version delete <template-id> <version> --yes --app-key <appkey>
42
+ nhncloud ncs template version create <template-id> --file ./version-create.json
43
+ nhncloud ncs template version delete <template-id> <version> --yes
45
44
  ```
46
45
 
47
46
  ## Workload(런타임 실행) 조회
48
47
 
49
48
  ```bash
50
- nhncloud ncs workload list --app-key <appkey> --json
51
- nhncloud ncs workload list --q <워크로드 이름> --app-key <appkey> --json
52
- nhncloud ncs workload get <workload-id> --app-key <appkey> --json
49
+ nhncloud ncs workload list --json
50
+ nhncloud ncs workload list --q <워크로드 이름> --json
51
+ nhncloud ncs workload get <workload-id> --json
53
52
  ```
54
53
 
55
54
  컨테이너 로그와 이벤트는 특정 task 를 지정해야 한다.
56
55
  `--task`는 `workload get` 응답의 `tasks[].id`에서 얻는다.
57
56
 
58
57
  ```bash
59
- nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --app-key <appkey> --json
60
- nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --from 1h --to now --app-key <appkey>
61
- nhncloud ncs workload events <workload-id> --task <task-id> --app-key <appkey> --json
62
- nhncloud ncs workload events <workload-id> --task <task-id> --type Warning --app-key <appkey> --json
58
+ nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --json
59
+ nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --from 1h --to now
60
+ nhncloud ncs workload events <workload-id> --task <task-id> --json
61
+ nhncloud ncs workload events <workload-id> --task <task-id> --type Warning --json
63
62
  ```
64
63
 
65
64
  ### logs·events 시간 필터
@@ -102,9 +101,9 @@ AI 에이전트는 같은 입력으로 인증 재시도를 반복하지 말고
102
101
  실행 히스토리와 예약 실행 히스토리는 workload 단위로 조회한다.
103
102
 
104
103
  ```bash
105
- nhncloud ncs workload history <workload-id> --app-key <appkey> --json
106
- nhncloud ncs workload history get <workload-id> <history-id> --app-key <appkey> --json
107
- nhncloud ncs workload schedule-history <workload-id> --app-key <appkey> --json
104
+ nhncloud ncs workload history <workload-id> --json
105
+ nhncloud ncs workload history get <workload-id> <history-id> --json
106
+ nhncloud ncs workload schedule-history <workload-id> --json
108
107
  ```
109
108
 
110
109
  ## Workload 실행제어
@@ -112,10 +111,10 @@ nhncloud ncs workload schedule-history <workload-id> --app-key <appkey> --json
112
111
  일시정지·재개는 workload 단위, 재시작은 task 단위(`--task` 필수), 삭제는 위험 명령이라 `--yes` 필수(비대화형) 또는 확인 프롬프트(TTY)를 거친다.
113
112
 
114
113
  ```bash
115
- nhncloud ncs workload pause <workload-id> --app-key <appkey>
116
- nhncloud ncs workload resume <workload-id> --app-key <appkey>
117
- nhncloud ncs workload restart <workload-id> --task <task-id> --app-key <appkey>
118
- nhncloud ncs workload delete <workload-id> --yes --app-key <appkey>
114
+ nhncloud ncs workload pause <workload-id>
115
+ nhncloud ncs workload resume <workload-id>
116
+ nhncloud ncs workload restart <workload-id> --task <task-id>
117
+ nhncloud ncs workload delete <workload-id> --yes
119
118
  ```
120
119
 
121
120
  ## Workload 생성/변경
@@ -125,11 +124,11 @@ nhncloud ncs workload delete <workload-id> --yes --app-key <appkey>
125
124
  변경은 `update`(PUT, 전체 교체)와 `patch`(PATCH, JSON Patch 배열 부분 변경) 두 가지다.
126
125
 
127
126
  ```bash
128
- nhncloud ncs workload create --file ./workload-create.json --app-key <appkey> --json
129
- nhncloud ncs workload create --file ./workload-create.json --wait --timeout 600 --app-key <appkey> --json
127
+ nhncloud ncs workload create --file ./workload-create.json --json
128
+ nhncloud ncs workload create --file ./workload-create.json --wait --timeout 600 --json
130
129
 
131
- nhncloud ncs workload update <workload-id> --file ./workload-update.json --app-key <appkey> --json
132
- nhncloud ncs workload patch <workload-id> --file ./workload-patch.json --app-key <appkey> --json
130
+ nhncloud ncs workload update <workload-id> --file ./workload-update.json --json
131
+ nhncloud ncs workload patch <workload-id> --file ./workload-patch.json --json
133
132
  ```
134
133
 
135
134
  `patch`의 `--file`은 JSON Patch(RFC 6902) 배열이다.
@@ -146,20 +145,20 @@ nhncloud ncs workload patch <workload-id> --file ./workload-patch.json --app-key
146
145
  `historyId`는 `workload history` 목록 또는 `workload history get`의 `id`를 사용한다.
147
146
 
148
147
  ```bash
149
- nhncloud ncs malware config get --app-key <appkey> --json
150
- nhncloud ncs malware config set --enabled true --app-key <appkey>
151
- nhncloud ncs malware config set --enabled false --app-key <appkey>
148
+ nhncloud ncs malware config get --json
149
+ nhncloud ncs malware config set --enabled true
150
+ nhncloud ncs malware config set --enabled false
152
151
 
153
- nhncloud ncs malware result <workload-id> <history-id> --app-key <appkey> --json
152
+ nhncloud ncs malware result <workload-id> <history-id> --json
154
153
  ```
155
154
 
156
155
  ## 체이닝 예시
157
156
 
158
157
  ```bash
159
- nhncloud ncs template list --app-key <appkey> --json | jq -r '.[].id'
160
- nhncloud ncs workload list --app-key <appkey> --json | jq -r '.[] | select(.status=="Failed") | .id'
161
- nhncloud ncs workload get <workload-id> --app-key <appkey> --json | jq -r '.tasks[].id'
162
- nhncloud ncs workload history <workload-id> --app-key <appkey> --json | jq -r '.[0].id' # 최신 historyId
158
+ nhncloud ncs template list --json | jq -r '.[].id'
159
+ nhncloud ncs workload list --json | jq -r '.[] | select(.status=="Failed") | .id'
160
+ nhncloud ncs workload get <workload-id> --json | jq -r '.tasks[].id'
161
+ nhncloud ncs workload history <workload-id> --json | jq -r '.[0].id' # 최신 historyId
163
162
  ```
164
163
 
165
164
  ## 옵션
@@ -167,7 +166,6 @@ nhncloud ncs workload history <workload-id> --app-key <appkey> --json | jq -r '.
167
166
  | 옵션 | 설명 |
168
167
  |------|------|
169
168
  | `--region <region>` | NCS region. 기본 `kr1`. `kr1`·`kr3`만 지원 |
170
- | `--app-key <key>` | NCS appkey |
171
169
  | `--profile <name>` | 사용할 profile |
172
170
  | `--page <page>` / `--size <size>` | 페이지네이션 (기본 size는 명령별 상이 — `--help` 확인) |
173
171
  | `--q <query>` | workload list·events 필터 |