@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/README.md +16 -9
- package/dist/index.js +843 -674
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +2 -2
- package/skills/nhncloud-cli/references/common.md +2 -2
- package/skills/nhncloud-cli/references/deploy.md +40 -43
- package/skills/nhncloud-cli/references/logncrash.md +76 -10
- package/skills/nhncloud-cli/references/ncr.md +5 -7
- package/skills/nhncloud-cli/references/ncs.md +37 -39
package/package.json
CHANGED
|
@@ -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
|
|
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` | 핵심
|
|
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
|
-
|
|
12
|
+
배포 좌표(아티팩트·서버그룹·시나리오 등)는 config에 두지 않는다.
|
|
13
|
+
매 호출마다 명령 옵션으로 넘긴다.
|
|
14
|
+
반복되는 값은 호출하는 쪽의 스크립트나 CI 변수가 관리한다.
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
**여러 배포 대상을 쓰려면 profile 을 나눈다.**
|
|
17
|
+
profile 하나에 appkey 하나다.
|
|
14
18
|
|
|
15
19
|
```bash
|
|
16
|
-
nhncloud
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
40
|
-
nhncloud deploy run
|
|
41
|
-
nhncloud deploy run
|
|
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
|
-
| `--
|
|
49
|
-
| `--
|
|
50
|
-
| `--
|
|
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
|
|
66
|
-
nhncloud deploy server-groups
|
|
67
|
-
nhncloud deploy histories
|
|
68
|
-
nhncloud deploy binary-groups
|
|
69
|
-
nhncloud deploy binaries
|
|
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
|
|
77
|
-
| 서버그룹 목록 | `deploy server-groups <
|
|
78
|
-
| 배포 이력 | `deploy histories <
|
|
79
|
-
| 바이너리 그룹 목록 | `deploy binary-groups <
|
|
80
|
-
| 바이너리 목록 | `deploy binaries <
|
|
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 <
|
|
89
|
-
nhncloud deploy download <
|
|
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
|
|
102
|
-
nhncloud deploy run
|
|
103
|
-
nhncloud deploy histories
|
|
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 누락 또는
|
|
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
|
-
|
|
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 --
|
|
23
|
-
nhncloud ncr list --region kr2 --
|
|
24
|
-
nhncloud ncr get <registry> --
|
|
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 --
|
|
44
|
-
nhncloud ncr get <registry> --
|
|
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`) 로
|
|
11
|
+
`nhncloud configure` (대화형 또는 `--ncs-appkey`) 로 설정한다.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
nhncloud ncs template list
|
|
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 --
|
|
24
|
-
nhncloud ncs template list --region kr3 --
|
|
25
|
-
nhncloud ncs template get <template-id> --
|
|
26
|
-
nhncloud ncs template version list <template-id> --
|
|
27
|
-
nhncloud ncs template version get <template-id> <version> --
|
|
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
|
|
37
|
-
nhncloud ncs template delete <template-id> --yes
|
|
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
|
|
44
|
-
nhncloud ncs template version delete <template-id> <version> --yes
|
|
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 --
|
|
51
|
-
nhncloud ncs workload list --q <워크로드 이름> --
|
|
52
|
-
nhncloud ncs workload get <workload-id> --
|
|
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> --
|
|
60
|
-
nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --from 1h --to now
|
|
61
|
-
nhncloud ncs workload events <workload-id> --task <task-id> --
|
|
62
|
-
nhncloud ncs workload events <workload-id> --task <task-id> --type Warning --
|
|
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> --
|
|
106
|
-
nhncloud ncs workload history get <workload-id> <history-id> --
|
|
107
|
-
nhncloud ncs workload schedule-history <workload-id> --
|
|
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>
|
|
116
|
-
nhncloud ncs workload resume <workload-id>
|
|
117
|
-
nhncloud ncs workload restart <workload-id> --task <task-id>
|
|
118
|
-
nhncloud ncs workload delete <workload-id> --yes
|
|
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 --
|
|
129
|
-
nhncloud ncs workload create --file ./workload-create.json --wait --timeout 600 --
|
|
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 --
|
|
132
|
-
nhncloud ncs workload patch <workload-id> --file ./workload-patch.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 --
|
|
150
|
-
nhncloud ncs malware config set --enabled true
|
|
151
|
-
nhncloud ncs malware config set --enabled false
|
|
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> --
|
|
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 --
|
|
160
|
-
nhncloud ncs workload list --
|
|
161
|
-
nhncloud ncs workload get <workload-id> --
|
|
162
|
-
nhncloud ncs workload history <workload-id> --
|
|
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 필터 |
|