@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.
@@ -0,0 +1,167 @@
1
+ # NCS Reference
2
+
3
+ `ncs` 명령군은 NHN Container Service 의 template(설계도)과 workload(런타임 실행)를 조회·관리한다.
4
+ template 의 생성·삭제, workload 의 생성·변경(update/patch)·실행제어(일시정지/재개/재시작/삭제), 악성코드 검사(malware) 설정·결과 조회를 지원한다.
5
+
6
+ ## 설정
7
+
8
+ 공통 UAK와 NCS appkey가 필요하다.
9
+ 인증은 Deploy 와 같은 UAK OAuth Bearer 토큰을 재사용한다(profile 토큰 캐시 공유).
10
+
11
+ `configure` 마법사는 아직 ncs를 지원하지 않는다.
12
+ `--app-key` 옵션 또는 `~/.nhncloud/credentials.json` 의 `profiles.<profile>.ncs.appkey` 를 직접 추가한다.
13
+
14
+ ```bash
15
+ nhncloud ncs template list --app-key <appkey>
16
+ ```
17
+
18
+ `--app-key <key>`는 profile의 `ncs.appkey`보다 우선한다.
19
+ 기본 region은 `kr1`이고, `kr1`, `kr3`만 지원한다(판교·광주).
20
+
21
+ ## Template(설계도) 조회
22
+
23
+ ```bash
24
+ nhncloud ncs template list --app-key <appkey> --json
25
+ nhncloud ncs template list --region kr3 --app-key <appkey> --json
26
+ nhncloud ncs template get <template-id> --app-key <appkey> --json
27
+ nhncloud ncs template version list <template-id> --app-key <appkey> --json
28
+ nhncloud ncs template version get <template-id> <version> --app-key <appkey> --json
29
+ ```
30
+
31
+ ## Template(설계도) 생성/삭제
32
+
33
+ 복잡한 생성 입력은 공식 API payload 를 JSON 파일로 전달한다(`--file`).
34
+ 삭제는 위험 명령이라 비대화형 환경에서 `--yes` 가 필수이고, TTY 에서는 확인 프롬프트가 뜬다.
35
+
36
+ ```bash
37
+ nhncloud ncs template create --file ./template-create.json --app-key <appkey>
38
+ nhncloud ncs template delete <template-id> --yes --app-key <appkey>
39
+ ```
40
+
41
+ 버전 생성도 동일하게 `--file` 을 쓰며, payload 의 `sourceVersion` 필드가 필수다(어느 버전을 기준으로 새 버전을 만들지 지정).
42
+
43
+ ```bash
44
+ nhncloud ncs template version create <template-id> --file ./version-create.json --app-key <appkey>
45
+ nhncloud ncs template version delete <template-id> <version> --yes --app-key <appkey>
46
+ ```
47
+
48
+ ## Workload(런타임 실행) 조회
49
+
50
+ ```bash
51
+ nhncloud ncs workload list --app-key <appkey> --json
52
+ nhncloud ncs workload list --q <워크로드 이름> --app-key <appkey> --json
53
+ nhncloud ncs workload get <workload-id> --app-key <appkey> --json
54
+ ```
55
+
56
+ 컨테이너 로그와 이벤트는 특정 task 를 지정해야 한다.
57
+ `--task`는 `workload get` 응답의 `tasks[].id`에서 얻는다.
58
+
59
+ ```bash
60
+ nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --app-key <appkey> --json
61
+ nhncloud ncs workload logs <workload-id> --task <task-id> --container <name> --from 1h --to now --app-key <appkey>
62
+ nhncloud ncs workload events <workload-id> --task <task-id> --app-key <appkey> --json
63
+ nhncloud ncs workload events <workload-id> --task <task-id> --type Warning --app-key <appkey> --json
64
+ ```
65
+
66
+ 실행 히스토리와 예약 실행 히스토리는 workload 단위로 조회한다.
67
+
68
+ ```bash
69
+ nhncloud ncs workload history <workload-id> --app-key <appkey> --json
70
+ nhncloud ncs workload history get <workload-id> <history-id> --app-key <appkey> --json
71
+ nhncloud ncs workload schedule-history <workload-id> --app-key <appkey> --json
72
+ ```
73
+
74
+ ## Workload 실행제어
75
+
76
+ 일시정지·재개는 workload 단위, 재시작은 task 단위(`--task` 필수), 삭제는 위험 명령이라 `--yes` 필수(비대화형) 또는 확인 프롬프트(TTY)를 거친다.
77
+
78
+ ```bash
79
+ nhncloud ncs workload pause <workload-id> --app-key <appkey>
80
+ nhncloud ncs workload resume <workload-id> --app-key <appkey>
81
+ nhncloud ncs workload restart <workload-id> --task <task-id> --app-key <appkey>
82
+ nhncloud ncs workload delete <workload-id> --yes --app-key <appkey>
83
+ ```
84
+
85
+ ## Workload 생성/변경
86
+
87
+ 생성은 비동기다.
88
+ `--wait`를 주면 `Running` 상태가 될 때까지 폴링하고, `--timeout <sec>`(기본 300)으로 대기 시간을 조절한다.
89
+ 변경은 `update`(PUT, 전체 교체)와 `patch`(PATCH, JSON Patch 배열 부분 변경) 두 가지다.
90
+
91
+ ```bash
92
+ nhncloud ncs workload create --file ./workload-create.json --app-key <appkey> --json
93
+ nhncloud ncs workload create --file ./workload-create.json --wait --timeout 600 --app-key <appkey> --json
94
+
95
+ nhncloud ncs workload update <workload-id> --file ./workload-update.json --app-key <appkey> --json
96
+ nhncloud ncs workload patch <workload-id> --file ./workload-patch.json --app-key <appkey> --json
97
+ ```
98
+
99
+ `patch`의 `--file`은 JSON Patch(RFC 6902) 배열이다.
100
+
101
+ ```json
102
+ [
103
+ { "op": "replace", "path": "/workload/desired", "value": 2 }
104
+ ]
105
+ ```
106
+
107
+ ## 악성코드 검사(malware)
108
+
109
+ 설정은 appkey 단위, 결과는 workload 실행 히스토리 단위로 조회한다.
110
+ `historyId`는 `workload history` 목록 또는 `workload history get`의 `id`를 사용한다.
111
+
112
+ ```bash
113
+ nhncloud ncs malware config get --app-key <appkey> --json
114
+ nhncloud ncs malware config set --enabled true --app-key <appkey>
115
+ nhncloud ncs malware config set --enabled false --app-key <appkey>
116
+
117
+ nhncloud ncs malware result <workload-id> <history-id> --app-key <appkey> --json
118
+ ```
119
+
120
+ ## 체이닝 예시
121
+
122
+ ```bash
123
+ nhncloud ncs template list --app-key <appkey> --json | jq -r '.[].id'
124
+ nhncloud ncs workload list --app-key <appkey> --json | jq -r '.[] | select(.status=="Failed") | .id'
125
+ nhncloud ncs workload get <workload-id> --app-key <appkey> --json | jq -r '.tasks[].id'
126
+ nhncloud ncs workload history <workload-id> --app-key <appkey> --json | jq -r '.[0].id' # 최신 historyId
127
+ ```
128
+
129
+ ## 옵션
130
+
131
+ | 옵션 | 설명 |
132
+ |------|------|
133
+ | `--region <region>` | NCS region. 기본 `kr1`. `kr1`·`kr3`만 지원 |
134
+ | `--app-key <key>` | NCS appkey |
135
+ | `--profile <name>` | 사용할 profile |
136
+ | `--page <page>` / `--size <size>` | 페이지네이션 (기본 size는 명령별 상이 — `--help` 확인) |
137
+ | `--q <query>` | workload list·events 필터 |
138
+ | `--task <taskId>` | `workload logs`·`workload events`·`workload restart` 필수 |
139
+ | `--container <name>` | `workload logs` 필수 |
140
+ | `--sort <sort>` | `workload history` 정렬 (역순은 필드명 앞에 `-`) |
141
+ | `--file <path>` | `template create`·`template version create`·`workload create`·`workload update`·`workload patch` 필수 — JSON payload 파일 경로 (`patch`는 JSON Patch 배열) |
142
+ | `--wait` / `--timeout <sec>` | `workload create` — Running 상태 폴링(`--timeout` 기본 300초) |
143
+ | `--enabled <value>` | `malware config set` 필수. `true` 또는 `false` |
144
+ | `--yes` | `template delete`·`template version delete`·`workload delete` — 비대화형 환경 필수, TTY 는 생략 시 확인 프롬프트 |
145
+
146
+ ## 주의사항
147
+
148
+ - appkey는 NCS service appkey다. 인증 secret은 공통 UAK secret을 사용한다.
149
+ - `workload logs`·`workload events`는 task 단위 조회라 `--task` 없이는 입력 오류다.
150
+ - `workload restart`도 task 단위라 `--task` 없이는 입력 오류다.
151
+ - `workload schedule-history`는 page/size를 아직 노출하지 않는다(대량 이력 시 첫 페이지만 반환될 수 있음 — ADR-020).
152
+ - template/workload id, history id 인수가 공백이면 입력 오류다.
153
+ - `template version create`의 `--file` payload 는 `sourceVersion` 필드가 필수다 — 누락 시 API 오류로 반환된다(클라이언트가 사전 검증하지 않음).
154
+ - `--file` 로 지정한 JSON payload 파일은 1MB 를 넘거나 디렉터리면 입력 오류다.
155
+ - 삭제 명령(`template delete`·`template version delete`·`workload delete`)은 비대화형 환경에서 `--yes` 없이 실행하면 입력 오류다.
156
+ - `workload create --wait`는 타임아웃까지 `Running` 상태에 도달하지 못하면 마지막 상태를 메시지에 포함해 API 오류로 반환한다.
157
+ - `workload patch`는 `Content-Type: application/json-patch+json`으로 전송된다 — `--file`에는 JSON Patch 배열(`op`/`path`/`value`)을 담아야 한다.
158
+ - `malware config set --enabled`는 `true`·`false` 외의 값이면 입력 오류다.
159
+
160
+ ## 에러 코드
161
+
162
+ | 상황 | exit code |
163
+ |------|-----------|
164
+ | UAK 누락 또는 NCS appkey 미설정 | 4 |
165
+ | UAK 인증 실패 | 2 |
166
+ | 지원하지 않는 region, 빈 id 인수, `--task`/`--container` 누락, `--file` 파일 오류(누락·디렉터리·크기초과·JSON 파싱 실패), `--enabled` 값 오류(`true`/`false` 외), 비대화형 삭제 시 `--yes` 누락 | 3 |
167
+ | NCS API 오류 (payload 필수값 누락, `workload create --wait` 타임아웃 등 서버측 검증·폴링 실패 포함) | 1 |
@@ -0,0 +1,95 @@
1
+ # NKS Reference
2
+
3
+ `nks` 명령군은 NHN Kubernetes Service를 관리한다.
4
+ IaaS 자격증명으로 Keystone token을 발급하고 `container-infra` API를 호출한다.
5
+ 지원 region은 `kr1`, `kr2`, `kr3`이다.
6
+
7
+ ## Discovery 순서
8
+
9
+ ```bash
10
+ nhncloud commands --json | jq '.commands[] | select(.path|startswith("nks"))'
11
+ nhncloud nks supports --json
12
+ nhncloud nks cluster list --json
13
+ nhncloud nks cluster get <cluster> --json
14
+ nhncloud nks nodegroup list <cluster> --json
15
+ ```
16
+
17
+ 클러스터 생성이나 변경 전에는 지원 Kubernetes version, flavor, network, 기존 cluster/nodegroup 상태를 먼저 조회한다.
18
+
19
+ ## Cluster 조회
20
+
21
+ ```bash
22
+ nhncloud nks cluster list --json
23
+ nhncloud nks cluster get <cluster> --json
24
+ nhncloud nks cluster events <cluster> --json
25
+ nhncloud nks cluster event <cluster> <event> --json
26
+ nhncloud nks cluster ipacl <cluster> --json
27
+ nhncloud nks cluster kubeconfig <cluster>
28
+ nhncloud nks cluster kubeconfig <cluster> --output ./kubeconfig
29
+ ```
30
+
31
+ `kubeconfig`는 문자열을 stdout으로 출력하거나 `--output` 파일에 저장한다.
32
+
33
+ ## Nodegroup 조회와 변경
34
+
35
+ ```bash
36
+ nhncloud nks nodegroup list <cluster> --json
37
+ nhncloud nks nodegroup get <cluster> <nodegroup> --json
38
+ nhncloud nks nodegroup autoscale <cluster> <nodegroup> --json
39
+ nhncloud nks nodegroup create <cluster> --file ./nodegroup-create.json
40
+ nhncloud nks nodegroup delete <cluster> <nodegroup> --yes
41
+ nhncloud nks nodegroup stop-node <cluster> <nodegroup> --nodes node-1,node-2
42
+ nhncloud nks nodegroup start-node <cluster> <nodegroup> --nodes node-1,node-2
43
+ nhncloud nks nodegroup set-autoscale <cluster> <nodegroup> --file ./autoscale.json
44
+ nhncloud nks nodegroup set-metric-autoscale <cluster> <nodegroup> --file ./metric-autoscale.json
45
+ nhncloud nks nodegroup upgrade <cluster> <nodegroup> --version v1.30.1
46
+ nhncloud nks nodegroup set-userscript <cluster> <nodegroup> --file ./userscript.sh
47
+ nhncloud nks nodegroup update-flavor <cluster> <nodegroup> --flavor <flavor-uuid>
48
+ nhncloud nks nodegroup set-fip-auto-bind <cluster> <nodegroup> --file ./fip-auto-bind.json
49
+ nhncloud nks nodegroup set-labels <cluster> <nodegroup> --file ./labels.json
50
+ ```
51
+
52
+ ## Addon 조회와 변경
53
+
54
+ ```bash
55
+ nhncloud nks addon-type list --json
56
+ nhncloud nks addon-type get <addon-type> --json
57
+ nhncloud nks addon list --k8s-version v1.30.1 --json
58
+ nhncloud nks addon get <addon> --json
59
+ nhncloud nks cluster addon list <cluster> --json
60
+ nhncloud nks cluster addon get <cluster> <addon> --json
61
+ nhncloud nks cluster addon install <cluster> --name coredns --version 1.0.0 --resolve-conflicts overwrite
62
+ nhncloud nks cluster addon update <cluster> coredns --version 1.0.1 --resolve-conflicts preserve
63
+ nhncloud nks cluster addon remove <cluster> coredns --yes
64
+ ```
65
+
66
+ ## Cluster 생성과 변경
67
+
68
+ 복잡한 생성/설정 작업은 공식 API payload를 JSON 파일로 전달한다.
69
+ payload에는 민감값이 들어갈 수 있으므로 로그나 이슈에 그대로 붙이지 않는다.
70
+
71
+ ```bash
72
+ nhncloud nks cluster create --file ./cluster-create.json
73
+ nhncloud nks cluster delete <cluster> --yes
74
+ nhncloud nks cluster resize <cluster> --nodegroup worker --node-count 3
75
+ nhncloud nks cluster set-ipacl <cluster> --file ./ipacl.json
76
+ nhncloud nks cluster renew-certificate <cluster> --term-of-validity 3
77
+ nhncloud nks cluster update-sgw <cluster> --ncr-sgw <uuid> --obs-sgw <uuid>
78
+ nhncloud nks cluster set-control-plane-log <cluster> --file ./control-plane-log.json
79
+ ```
80
+
81
+ ## JSON 출력
82
+
83
+ 목록 조회는 배열 또는 목록 객체로 출력한다.
84
+ 단건 조회와 설정 조회는 API raw 객체를 보존하는 쪽을 우선한다.
85
+ 생성, resize, 설정 변경, 노드 action, 애드온 변경은 `{ uuid }` 응답을 반환한다.
86
+ 삭제 명령은 성공 메시지만 stderr에 쓰고 stdout은 비운다.
87
+
88
+ ## 에러 코드
89
+
90
+ | 상황 | exit code |
91
+ |------|-----------|
92
+ | IaaS 자격증명 누락 또는 불완전 | 4 |
93
+ | Keystone 또는 NKS 인증 실패 | 2 |
94
+ | 지원하지 않는 region, payload JSON 파싱 실패, `--yes` 누락 | 3 |
95
+ | NKS API 오류 또는 응답 형식 불일치 | 1 |
@@ -0,0 +1,91 @@
1
+ # Troubleshooting Reference
2
+
3
+ 실패 시 exit code, 인증 모델, profile/region, JSON shape를 먼저 확인한다.
4
+
5
+ ## 빠른 진단 순서
6
+
7
+ 1. 명령에 `--profile <name>`을 명시했는지 확인한다.
8
+ 2. IaaS/NKS/NCR 명령이면 `--region <region>`이 의도와 맞는지 확인한다.
9
+ 3. 조회 명령을 `--json`으로 다시 실행해 stdout shape를 확인한다.
10
+ 4. `nhncloud commands --json`으로 실제 command path와 option 이름을 확인한다.
11
+ 5. exit code를 확인한다.
12
+ 6. 서비스별 인증 모델을 대조한다.
13
+
14
+ ## 인증 모델
15
+
16
+ | 서비스 | 비밀 | 인증 방식 |
17
+ |--------|------|-----------|
18
+ | Log & Crash 검색/export | appkey + secret | `X-LNCS-SECRET` |
19
+ | Log & Crash send | appkey | body `projectName=appkey`, 인증 헤더 없음 |
20
+ | Deploy | UAK id + secret | OAuth Bearer token |
21
+ | Instance/network/volume/floatingip | tenantId + username + API password | Keystone `X-Auth-Token` |
22
+ | NKS | tenantId + username + API password | Keystone `X-Auth-Token` + container-infra API version |
23
+ | NCR registry | UAK id + secret + NCR appkey | `X-TC-AUTHENTICATION-*` |
24
+ | NCR images/tags | UAK id + secret | HTTP Basic Auth to Harbor REST |
25
+
26
+ ## Exit code
27
+
28
+ | exit code | 의미 | 대표 원인 |
29
+ |-----------|------|-----------|
30
+ | 1 | API 오류 | 4xx/5xx, 봉투 실패, wait timeout |
31
+ | 2 | 인증 실패 | UAK/secret/password 오류, 권한 부족 |
32
+ | 3 | 입력 오류 | 필수 옵션 누락, region 미지원, 시간 범위 초과, `--yes` 누락 |
33
+ | 4 | config 오류 | profile 없음, 자격증명 블록 누락 |
34
+
35
+ ## Profile 누락
36
+
37
+ profile은 다음 순서로 해석된다.
38
+
39
+ 1. `--profile <name>`
40
+ 2. `NHNCLOUD_PROFILE`
41
+ 3. `~/.nhncloud/config.json`의 `defaultProfile`
42
+ 4. `default`
43
+
44
+ 자동화에서 의도와 다른 profile이 쓰이면 `--profile`을 명시한다.
45
+
46
+ ## Region mismatch
47
+
48
+ IaaS/NKS/NCR은 region별 endpoint를 사용한다.
49
+ 리소스가 보이지 않으면 같은 profile에서 다른 region을 조회했을 수 있다.
50
+
51
+ ```bash
52
+ nhncloud instance list --region kr1 --json
53
+ nhncloud instance list --region kr2 --json
54
+ nhncloud nks cluster list --region kr1 --json
55
+ nhncloud ncr list --region kr2 --json
56
+ ```
57
+
58
+ ## JSON shape 혼동
59
+
60
+ CLI는 API wrapper를 일관되게 언랩한다.
61
+ 예를 들어 `instance get --json`은 `.server.status`가 아니라 `.status`다.
62
+ 목록과 단건의 shape가 다를 수 있으므로 jq path를 쓰기 전에 `--json` 원문을 확인한다.
63
+
64
+ ```bash
65
+ nhncloud instance get <instance-id> --json | jq keys
66
+ nhncloud ncr list --json | jq '.[0] | keys'
67
+ ```
68
+
69
+ ## Log & Crash 검색 제한
70
+
71
+ - `--from`은 최근 90일 이내여야 한다.
72
+ - `--to - --from` 범위는 31일 이하여야 한다.
73
+ - scrollKey는 1분 만료다.
74
+ - export가 중간 실패하면 검색 범위를 좁히거나 `--size`를 키운다.
75
+
76
+ ## 쓰기 명령 confirm
77
+
78
+ 삭제, 제거, 비용 발생 가능 명령은 비대화형 환경에서 `--yes`가 필요할 수 있다.
79
+
80
+ ```bash
81
+ nhncloud instance delete <instance-id> --yes
82
+ nhncloud floatingip delete <floatingip-id> --yes
83
+ nhncloud nks cluster delete <cluster> --yes
84
+ nhncloud nks cluster addon remove <cluster> <addon> --yes
85
+ ```
86
+
87
+ ## stdout/stderr 분리
88
+
89
+ 데이터는 stdout에 출력된다.
90
+ 진행 상황, 저장 완료, 성공 메시지, 에러는 stderr에 출력된다.
91
+ 스크립트에서 stdout만 파싱하고 stderr는 로그로 분리한다.