@bifos/nhncloud-cli 0.5.0 → 0.6.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 +147 -1
- package/dist/index.js +1398 -20
- package/package.json +1 -1
- package/skills/nhncloud-cli/SKILL.md +138 -3
package/dist/index.js
CHANGED
|
@@ -24,8 +24,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
));
|
|
25
25
|
|
|
26
26
|
// src/index.ts
|
|
27
|
-
var
|
|
28
|
-
var
|
|
27
|
+
var import_commander42 = require("commander");
|
|
28
|
+
var import_chalk14 = __toESM(require("chalk"));
|
|
29
29
|
|
|
30
30
|
// src/utils/spinner.ts
|
|
31
31
|
var import_ora = __toESM(require("ora"));
|
|
@@ -317,7 +317,7 @@ function iaasCachePath(profile, region) {
|
|
|
317
317
|
function isIaasTokenCache(val) {
|
|
318
318
|
if (typeof val !== "object" || val === null) return false;
|
|
319
319
|
const obj = val;
|
|
320
|
-
return typeof obj["tokenId"] === "string" && typeof obj["expiresAt"] === "string" && typeof obj["computeEndpoint"] === "string" && typeof obj["imageEndpoint"] === "string" && typeof obj["networkEndpoint"] === "string" && typeof obj["blockStorageEndpoint"] === "string";
|
|
320
|
+
return typeof obj["tokenId"] === "string" && typeof obj["expiresAt"] === "string" && typeof obj["computeEndpoint"] === "string" && typeof obj["imageEndpoint"] === "string" && typeof obj["networkEndpoint"] === "string" && typeof obj["blockStorageEndpoint"] === "string" && typeof obj["nksEndpoint"] === "string";
|
|
321
321
|
}
|
|
322
322
|
async function readIaasToken(profile, region) {
|
|
323
323
|
const filePath = iaasCachePath(profile, region);
|
|
@@ -334,7 +334,8 @@ async function readIaasToken(profile, region) {
|
|
|
334
334
|
computeEndpoint: parsed.computeEndpoint,
|
|
335
335
|
imageEndpoint: parsed.imageEndpoint,
|
|
336
336
|
networkEndpoint: parsed.networkEndpoint,
|
|
337
|
-
blockStorageEndpoint: parsed.blockStorageEndpoint
|
|
337
|
+
blockStorageEndpoint: parsed.blockStorageEndpoint,
|
|
338
|
+
nksEndpoint: parsed.nksEndpoint
|
|
338
339
|
};
|
|
339
340
|
} catch {
|
|
340
341
|
return null;
|
|
@@ -349,7 +350,8 @@ async function writeIaasToken(profile, region, data) {
|
|
|
349
350
|
computeEndpoint: data.computeEndpoint,
|
|
350
351
|
imageEndpoint: data.imageEndpoint,
|
|
351
352
|
networkEndpoint: data.networkEndpoint,
|
|
352
|
-
blockStorageEndpoint: data.blockStorageEndpoint
|
|
353
|
+
blockStorageEndpoint: data.blockStorageEndpoint,
|
|
354
|
+
nksEndpoint: data.nksEndpoint
|
|
353
355
|
};
|
|
354
356
|
const tmp = filePath + "." + (0, import_node_crypto.randomBytes)(4).toString("hex") + ".tmp";
|
|
355
357
|
await (0, import_promises2.writeFile)(tmp, JSON.stringify(cache, null, 2), { encoding: "utf-8", mode: 384 });
|
|
@@ -495,6 +497,11 @@ var BLOCKSTORAGE_HOST = {
|
|
|
495
497
|
jp1: "jp1-api-block-storage-infrastructure.nhncloudservice.com"
|
|
496
498
|
};
|
|
497
499
|
var IAAS_REGIONS = Object.keys(INSTANCE_HOST).join(", ");
|
|
500
|
+
var NKS_HOST = {
|
|
501
|
+
kr1: "kr1-api-kubernetes-infrastructure.nhncloudservice.com",
|
|
502
|
+
kr2: "kr2-api-kubernetes-infrastructure.nhncloudservice.com",
|
|
503
|
+
kr3: "kr3-api-kubernetes-infrastructure.nhncloudservice.com"
|
|
504
|
+
};
|
|
498
505
|
var NCR_HOST = {
|
|
499
506
|
kr1: "kr1-ncr.api.nhncloudservice.com",
|
|
500
507
|
kr2: "kr2-ncr.api.nhncloudservice.com",
|
|
@@ -550,6 +557,16 @@ function blockStorageHost(region) {
|
|
|
550
557
|
}
|
|
551
558
|
return host;
|
|
552
559
|
}
|
|
560
|
+
function nksHost(region) {
|
|
561
|
+
const host = NKS_HOST[region];
|
|
562
|
+
if (!host) {
|
|
563
|
+
throw new NhnCloudCliError(
|
|
564
|
+
`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 NKS region \uC785\uB2C8\uB2E4: "${region}". \uC0AC\uC6A9 \uAC00\uB2A5\uD55C region: ${Object.keys(NKS_HOST).join(", ")}`,
|
|
565
|
+
EXIT_PARAM_ERROR
|
|
566
|
+
);
|
|
567
|
+
}
|
|
568
|
+
return host;
|
|
569
|
+
}
|
|
553
570
|
|
|
554
571
|
// src/api/keystone.ts
|
|
555
572
|
function isKeystoneTokenResponse(val) {
|
|
@@ -570,7 +587,8 @@ async function getIaasToken(profile, iaas, forceRefresh = false) {
|
|
|
570
587
|
computeEndpoint: cached.computeEndpoint,
|
|
571
588
|
imageEndpoint: cached.imageEndpoint,
|
|
572
589
|
networkEndpoint: cached.networkEndpoint,
|
|
573
|
-
blockStorageEndpoint: cached.blockStorageEndpoint
|
|
590
|
+
blockStorageEndpoint: cached.blockStorageEndpoint,
|
|
591
|
+
nksEndpoint: cached.nksEndpoint
|
|
574
592
|
};
|
|
575
593
|
}
|
|
576
594
|
}
|
|
@@ -579,6 +597,7 @@ async function getIaasToken(profile, iaas, forceRefresh = false) {
|
|
|
579
597
|
const imageEndpoint = `https://${imageHost(iaas.region)}/v2`;
|
|
580
598
|
const networkEndpoint = `https://${networkHost(iaas.region)}/v2.0`;
|
|
581
599
|
const blockStorageEndpoint = `https://${blockStorageHost(iaas.region)}/v2/${encodeURIComponent(iaas.tenantId)}`;
|
|
600
|
+
const nksEndpoint = `https://${nksHost(iaas.region)}/v1`;
|
|
582
601
|
let raw;
|
|
583
602
|
try {
|
|
584
603
|
raw = await import_ky3.default.post(keystoneIdentityUrl(), {
|
|
@@ -605,9 +624,9 @@ async function getIaasToken(profile, iaas, forceRefresh = false) {
|
|
|
605
624
|
const tokenId = raw.access.token.id;
|
|
606
625
|
const expiresAt = raw.access.token.expires;
|
|
607
626
|
if (!forceRefresh) {
|
|
608
|
-
await writeIaasToken(profile, iaas.region, { tokenId, expiresAt, computeEndpoint, imageEndpoint, networkEndpoint, blockStorageEndpoint });
|
|
627
|
+
await writeIaasToken(profile, iaas.region, { tokenId, expiresAt, computeEndpoint, imageEndpoint, networkEndpoint, blockStorageEndpoint, nksEndpoint });
|
|
609
628
|
}
|
|
610
|
-
return { tokenId, computeEndpoint, imageEndpoint, networkEndpoint, blockStorageEndpoint };
|
|
629
|
+
return { tokenId, computeEndpoint, imageEndpoint, networkEndpoint, blockStorageEndpoint, nksEndpoint };
|
|
611
630
|
}
|
|
612
631
|
|
|
613
632
|
// src/services/logncrash/client.ts
|
|
@@ -1535,7 +1554,8 @@ function isBinaryGroup(val) {
|
|
|
1535
1554
|
if (typeof val !== "object" || val === null) return false;
|
|
1536
1555
|
const obj = val;
|
|
1537
1556
|
const keyType = typeof obj["key"];
|
|
1538
|
-
|
|
1557
|
+
const descriptionType = typeof obj["description"];
|
|
1558
|
+
return (keyType === "number" || keyType === "string") && typeof obj["name"] === "string" && (descriptionType === "undefined" || descriptionType === "string" || obj["description"] === null);
|
|
1539
1559
|
}
|
|
1540
1560
|
function isBinary(val) {
|
|
1541
1561
|
if (typeof val !== "object" || val === null) return false;
|
|
@@ -4205,25 +4225,1376 @@ var tagsCommand = new import_commander37.Command("tags").description("\uD2B9\uC8
|
|
|
4205
4225
|
});
|
|
4206
4226
|
});
|
|
4207
4227
|
|
|
4228
|
+
// src/commands/nks/supports.ts
|
|
4229
|
+
var import_commander38 = require("commander");
|
|
4230
|
+
|
|
4231
|
+
// src/commands/nks/helpers.ts
|
|
4232
|
+
var import_promises4 = require("fs/promises");
|
|
4233
|
+
|
|
4234
|
+
// src/services/nks/client.ts
|
|
4235
|
+
var import_ky11 = __toESM(require("ky"));
|
|
4236
|
+
|
|
4237
|
+
// src/services/nks/types.ts
|
|
4238
|
+
function isNksClusterSummary(val) {
|
|
4239
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4240
|
+
const obj = val;
|
|
4241
|
+
return typeof obj["uuid"] === "string" && typeof obj["name"] === "string" && typeof obj["status"] === "string" && typeof obj["health_status"] === "string" && (typeof obj["node_count"] === "number" || typeof obj["node_count"] === "string") && typeof obj["kube_tag"] === "string";
|
|
4242
|
+
}
|
|
4243
|
+
function isNksSupports(val) {
|
|
4244
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4245
|
+
const obj = val;
|
|
4246
|
+
return isPlainObject(obj["supported_k8s"]) && isPlainObject(obj["supported_event_type"]);
|
|
4247
|
+
}
|
|
4248
|
+
function isPlainObject(val) {
|
|
4249
|
+
return typeof val === "object" && val !== null && !Array.isArray(val);
|
|
4250
|
+
}
|
|
4251
|
+
function isNksNamedResource(val) {
|
|
4252
|
+
if (!isPlainObject(val)) return false;
|
|
4253
|
+
if ("header" in val || "body" in val) return false;
|
|
4254
|
+
const uuid = val["uuid"];
|
|
4255
|
+
const id = val["id"];
|
|
4256
|
+
const name = val["name"];
|
|
4257
|
+
const status = val["status"];
|
|
4258
|
+
const hasKnownResourceField = typeof uuid === "string" || typeof id === "string" || typeof name === "string" || typeof status === "string";
|
|
4259
|
+
return hasKnownResourceField && (uuid === void 0 || typeof uuid === "string") && (id === void 0 || typeof id === "string") && (name === void 0 || typeof name === "string") && (status === void 0 || typeof status === "string");
|
|
4260
|
+
}
|
|
4261
|
+
function isNksNodeGroupSummary(val) {
|
|
4262
|
+
if (!isPlainObject(val)) return false;
|
|
4263
|
+
return typeof val["uuid"] === "string" && typeof val["name"] === "string" && typeof val["status"] === "string";
|
|
4264
|
+
}
|
|
4265
|
+
function isNksAddonType(val) {
|
|
4266
|
+
return isPlainObject(val) && typeof val["name"] === "string";
|
|
4267
|
+
}
|
|
4268
|
+
function isNksAddon(val) {
|
|
4269
|
+
return isPlainObject(val) && typeof val["name"] === "string";
|
|
4270
|
+
}
|
|
4271
|
+
function isNksClusterIpAcl(val) {
|
|
4272
|
+
if (!isPlainObject(val) || "header" in val || "body" in val) return false;
|
|
4273
|
+
if (typeof val["cluster_uuid"] !== "string" || !isBooleanLike(val["enable"])) return false;
|
|
4274
|
+
const isEnabled = val["enable"] === true || val["enable"] === "true";
|
|
4275
|
+
if (!isEnabled) return true;
|
|
4276
|
+
return typeof val["action"] === "string" && Array.isArray(val["ipacl_targets"]);
|
|
4277
|
+
}
|
|
4278
|
+
function isNksNodeGroupAutoscale(val) {
|
|
4279
|
+
return isPlainObject(val) && !("header" in val) && !("body" in val) && isBooleanLike(val["ca_enable"]) && typeof val["clusterautoscale"] === "string";
|
|
4280
|
+
}
|
|
4281
|
+
function isBooleanLike(val) {
|
|
4282
|
+
return typeof val === "boolean" || val === "true" || val === "false";
|
|
4283
|
+
}
|
|
4284
|
+
function isNksUuidResponse(val) {
|
|
4285
|
+
return isPlainObject(val) && typeof val["uuid"] === "string";
|
|
4286
|
+
}
|
|
4287
|
+
|
|
4288
|
+
// src/services/nks/client.ts
|
|
4289
|
+
var DEFAULT_TIMEOUT_MS7 = 3e4;
|
|
4290
|
+
function isClustersResponse(val) {
|
|
4291
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4292
|
+
const obj = val;
|
|
4293
|
+
return Array.isArray(obj["clusters"]) && obj["clusters"].every(isNksClusterSummary);
|
|
4294
|
+
}
|
|
4295
|
+
function isNamedResourceArrayResponse(key, val) {
|
|
4296
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4297
|
+
const obj = val;
|
|
4298
|
+
return Array.isArray(obj[key]) && obj[key].every(isNksNamedResource);
|
|
4299
|
+
}
|
|
4300
|
+
function isConfigResponse(val) {
|
|
4301
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4302
|
+
const obj = val;
|
|
4303
|
+
return typeof obj["config"] === "string";
|
|
4304
|
+
}
|
|
4305
|
+
function isNodeGroupsResponse(val) {
|
|
4306
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4307
|
+
const obj = val;
|
|
4308
|
+
return Array.isArray(obj["nodegroups"]) && obj["nodegroups"].every(isNksNodeGroupSummary);
|
|
4309
|
+
}
|
|
4310
|
+
function isAddonTypesResponse(val) {
|
|
4311
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4312
|
+
const obj = val;
|
|
4313
|
+
return Array.isArray(obj["addon_types"]) && obj["addon_types"].every(isNksAddonType);
|
|
4314
|
+
}
|
|
4315
|
+
function isAddonsResponse(val) {
|
|
4316
|
+
if (typeof val !== "object" || val === null) return false;
|
|
4317
|
+
const obj = val;
|
|
4318
|
+
return Array.isArray(obj["addons"]) && obj["addons"].every(isNksAddon);
|
|
4319
|
+
}
|
|
4320
|
+
var NksClient = class {
|
|
4321
|
+
tokenId;
|
|
4322
|
+
nksEndpoint;
|
|
4323
|
+
constructor(tokenId, nksEndpoint) {
|
|
4324
|
+
this.tokenId = tokenId;
|
|
4325
|
+
this.nksEndpoint = nksEndpoint;
|
|
4326
|
+
}
|
|
4327
|
+
authHeaders() {
|
|
4328
|
+
return {
|
|
4329
|
+
"X-Auth-Token": this.tokenId,
|
|
4330
|
+
"OpenStack-API-Version": "container-infra latest"
|
|
4331
|
+
};
|
|
4332
|
+
}
|
|
4333
|
+
/** NKS 지원 Kubernetes 버전과 event type 을 조회한다 (GET /supports). */
|
|
4334
|
+
async supports() {
|
|
4335
|
+
const url = `${this.nksEndpoint}/supports`;
|
|
4336
|
+
try {
|
|
4337
|
+
const raw = await import_ky11.default.get(url, {
|
|
4338
|
+
headers: this.authHeaders(),
|
|
4339
|
+
retry: 0,
|
|
4340
|
+
timeout: DEFAULT_TIMEOUT_MS7
|
|
4341
|
+
}).json();
|
|
4342
|
+
if (!isNksSupports(raw)) {
|
|
4343
|
+
throw new NhnCloudCliError(
|
|
4344
|
+
"nks supports \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 supported_k8s / supported_event_type \uAC1D\uCCB4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4345
|
+
EXIT_API_ERROR
|
|
4346
|
+
);
|
|
4347
|
+
}
|
|
4348
|
+
return raw;
|
|
4349
|
+
} catch (err) {
|
|
4350
|
+
throw toNhnCloudCliError(err);
|
|
4351
|
+
}
|
|
4352
|
+
}
|
|
4353
|
+
/** NKS 클러스터 목록을 조회한다 (GET /clusters). */
|
|
4354
|
+
async listClusters() {
|
|
4355
|
+
const url = `${this.nksEndpoint}/clusters`;
|
|
4356
|
+
try {
|
|
4357
|
+
const raw = await import_ky11.default.get(url, {
|
|
4358
|
+
headers: this.authHeaders(),
|
|
4359
|
+
retry: 0,
|
|
4360
|
+
timeout: DEFAULT_TIMEOUT_MS7
|
|
4361
|
+
}).json();
|
|
4362
|
+
if (!isClustersResponse(raw)) {
|
|
4363
|
+
throw new NhnCloudCliError(
|
|
4364
|
+
"nks cluster list \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 clusters \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4365
|
+
EXIT_API_ERROR
|
|
4366
|
+
);
|
|
4367
|
+
}
|
|
4368
|
+
return raw.clusters;
|
|
4369
|
+
} catch (err) {
|
|
4370
|
+
throw toNhnCloudCliError(err);
|
|
4371
|
+
}
|
|
4372
|
+
}
|
|
4373
|
+
async getCluster(cluster) {
|
|
4374
|
+
return this.getFlatNamedResource(
|
|
4375
|
+
`/clusters/${encodeURIComponent(cluster)}`,
|
|
4376
|
+
"nks cluster get \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 cluster \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4."
|
|
4377
|
+
);
|
|
4378
|
+
}
|
|
4379
|
+
async createCluster(payload) {
|
|
4380
|
+
return this.requestUuid("post", "/clusters", payload, "nks cluster create \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.");
|
|
4381
|
+
}
|
|
4382
|
+
async deleteCluster(cluster) {
|
|
4383
|
+
await this.requestNoBody("delete", `/clusters/${encodeURIComponent(cluster)}`);
|
|
4384
|
+
}
|
|
4385
|
+
async resizeCluster(params) {
|
|
4386
|
+
const payload = {
|
|
4387
|
+
nodegroup: params.nodegroup,
|
|
4388
|
+
node_count: params.nodeCount
|
|
4389
|
+
};
|
|
4390
|
+
if (params.nodesToRemove && params.nodesToRemove.length > 0) {
|
|
4391
|
+
payload["nodes_to_remove"] = params.nodesToRemove;
|
|
4392
|
+
}
|
|
4393
|
+
return this.requestUuid(
|
|
4394
|
+
"post",
|
|
4395
|
+
`/clusters/${encodeURIComponent(params.cluster)}/actions/resize`,
|
|
4396
|
+
payload,
|
|
4397
|
+
"nks cluster resize \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4398
|
+
);
|
|
4399
|
+
}
|
|
4400
|
+
async setClusterIpAcl(cluster, payload) {
|
|
4401
|
+
return this.requestUuid(
|
|
4402
|
+
"post",
|
|
4403
|
+
`/clusters/${encodeURIComponent(cluster)}/api_ep_ipacl`,
|
|
4404
|
+
payload,
|
|
4405
|
+
"nks cluster set-ipacl \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4406
|
+
);
|
|
4407
|
+
}
|
|
4408
|
+
async renewClusterCertificate(cluster, termOfValidity) {
|
|
4409
|
+
return this.requestUuid(
|
|
4410
|
+
"patch",
|
|
4411
|
+
`/certificates/${encodeURIComponent(cluster)}`,
|
|
4412
|
+
{ term_of_validity: termOfValidity },
|
|
4413
|
+
"nks cluster renew-certificate \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4414
|
+
);
|
|
4415
|
+
}
|
|
4416
|
+
async updateClusterServiceGateway(cluster, ncrSgw, obsSgw) {
|
|
4417
|
+
return this.requestUuid(
|
|
4418
|
+
"post",
|
|
4419
|
+
`/clusters/${encodeURIComponent(cluster)}/actions/update_sgw`,
|
|
4420
|
+
{ ncr_sgw: ncrSgw, obs_sgw: obsSgw },
|
|
4421
|
+
"nks cluster update-sgw \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4422
|
+
);
|
|
4423
|
+
}
|
|
4424
|
+
async setControlPlaneLog(cluster, controlPlaneLog) {
|
|
4425
|
+
return this.requestUuid(
|
|
4426
|
+
"patch",
|
|
4427
|
+
`/clusters/${encodeURIComponent(cluster)}`,
|
|
4428
|
+
{ type: "control_plane_log", control_plane_log: controlPlaneLog },
|
|
4429
|
+
"nks cluster set-control-plane-log \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4430
|
+
);
|
|
4431
|
+
}
|
|
4432
|
+
async listClusterEvents(cluster) {
|
|
4433
|
+
return this.getNamedResourceArray(
|
|
4434
|
+
"events",
|
|
4435
|
+
`/clusters/${encodeURIComponent(cluster)}/events`,
|
|
4436
|
+
"nks cluster events \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 events \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4437
|
+
);
|
|
4438
|
+
}
|
|
4439
|
+
async getClusterEvent(cluster, event) {
|
|
4440
|
+
return this.getFlatNamedResource(
|
|
4441
|
+
`/clusters/${encodeURIComponent(cluster)}/events/${encodeURIComponent(event)}`,
|
|
4442
|
+
"nks cluster event \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 event \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4."
|
|
4443
|
+
);
|
|
4444
|
+
}
|
|
4445
|
+
async getClusterKubeconfig(cluster) {
|
|
4446
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/config`);
|
|
4447
|
+
if (!isConfigResponse(raw)) {
|
|
4448
|
+
throw new NhnCloudCliError(
|
|
4449
|
+
"nks cluster kubeconfig \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 config \uBB38\uC790\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4450
|
+
EXIT_API_ERROR
|
|
4451
|
+
);
|
|
4452
|
+
}
|
|
4453
|
+
return raw.config;
|
|
4454
|
+
}
|
|
4455
|
+
async getClusterIpAcl(cluster) {
|
|
4456
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/api_ep_ipacl`);
|
|
4457
|
+
if (!isNksClusterIpAcl(raw)) {
|
|
4458
|
+
throw new NhnCloudCliError(
|
|
4459
|
+
"nks cluster ipacl \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 cluster_uuid, enable, action, ipacl_targets \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4460
|
+
EXIT_API_ERROR
|
|
4461
|
+
);
|
|
4462
|
+
}
|
|
4463
|
+
return raw;
|
|
4464
|
+
}
|
|
4465
|
+
async listNodeGroups(cluster) {
|
|
4466
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/nodegroups`);
|
|
4467
|
+
if (!isNodeGroupsResponse(raw)) {
|
|
4468
|
+
throw new NhnCloudCliError(
|
|
4469
|
+
"nks nodegroup list \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 nodegroups \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4470
|
+
EXIT_API_ERROR
|
|
4471
|
+
);
|
|
4472
|
+
}
|
|
4473
|
+
return raw.nodegroups;
|
|
4474
|
+
}
|
|
4475
|
+
async getNodeGroup(cluster, nodegroup) {
|
|
4476
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}`);
|
|
4477
|
+
if (!isNksNodeGroupSummary(raw)) {
|
|
4478
|
+
throw new NhnCloudCliError(
|
|
4479
|
+
"nks nodegroup get \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 nodegroup \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4.",
|
|
4480
|
+
EXIT_API_ERROR
|
|
4481
|
+
);
|
|
4482
|
+
}
|
|
4483
|
+
return raw;
|
|
4484
|
+
}
|
|
4485
|
+
async getNodeGroupAutoscale(cluster, nodegroup) {
|
|
4486
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/autoscale`);
|
|
4487
|
+
if (!isNksNodeGroupAutoscale(raw)) {
|
|
4488
|
+
throw new NhnCloudCliError(
|
|
4489
|
+
"nks nodegroup autoscale \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 ca_enable, clusterautoscale \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4490
|
+
EXIT_API_ERROR
|
|
4491
|
+
);
|
|
4492
|
+
}
|
|
4493
|
+
return raw;
|
|
4494
|
+
}
|
|
4495
|
+
async createNodeGroup(cluster, payload) {
|
|
4496
|
+
return this.requestUuid(
|
|
4497
|
+
"post",
|
|
4498
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups`,
|
|
4499
|
+
payload,
|
|
4500
|
+
"nks nodegroup create \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4501
|
+
);
|
|
4502
|
+
}
|
|
4503
|
+
async deleteNodeGroup(cluster, nodegroup) {
|
|
4504
|
+
await this.requestNoBody("delete", `/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}`);
|
|
4505
|
+
}
|
|
4506
|
+
async stopNodeGroupNodes(cluster, nodegroup, nodes) {
|
|
4507
|
+
return this.requestUuid(
|
|
4508
|
+
"post",
|
|
4509
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/stop_node`,
|
|
4510
|
+
{ node_list: nodes.join(":") },
|
|
4511
|
+
"nks nodegroup stop-node \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4512
|
+
);
|
|
4513
|
+
}
|
|
4514
|
+
async startNodeGroupNodes(cluster, nodegroup, nodes) {
|
|
4515
|
+
return this.requestUuid(
|
|
4516
|
+
"post",
|
|
4517
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/start_node`,
|
|
4518
|
+
{ node_list: nodes.join(":") },
|
|
4519
|
+
"nks nodegroup start-node \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4520
|
+
);
|
|
4521
|
+
}
|
|
4522
|
+
async setNodeGroupAutoscale(cluster, nodegroup, payload) {
|
|
4523
|
+
return this.requestUuid(
|
|
4524
|
+
"post",
|
|
4525
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/autoscale`,
|
|
4526
|
+
payload,
|
|
4527
|
+
"nks nodegroup set-autoscale \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4528
|
+
);
|
|
4529
|
+
}
|
|
4530
|
+
async setNodeGroupMetricAutoscale(cluster, nodegroup, payload) {
|
|
4531
|
+
return this.patchNodeGroup(cluster, nodegroup, "metric_base_autoscale", payload);
|
|
4532
|
+
}
|
|
4533
|
+
async upgradeNodeGroup(cluster, nodegroup, params) {
|
|
4534
|
+
const payload = { version: params.version };
|
|
4535
|
+
if (params.numBufferNodes !== void 0) payload["num_buffer_nodes"] = params.numBufferNodes;
|
|
4536
|
+
if (params.numMaxUnavailableNodes !== void 0) payload["num_max_unavailable_nodes"] = params.numMaxUnavailableNodes;
|
|
4537
|
+
return this.requestUuid(
|
|
4538
|
+
"post",
|
|
4539
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/upgrade`,
|
|
4540
|
+
payload,
|
|
4541
|
+
"nks nodegroup upgrade \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4542
|
+
);
|
|
4543
|
+
}
|
|
4544
|
+
async setNodeGroupUserscript(cluster, nodegroup, contents) {
|
|
4545
|
+
return this.requestUuid(
|
|
4546
|
+
"post",
|
|
4547
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}/userscript`,
|
|
4548
|
+
{ contents },
|
|
4549
|
+
"nks nodegroup set-userscript \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4550
|
+
);
|
|
4551
|
+
}
|
|
4552
|
+
async updateNodeGroupFlavor(cluster, nodegroup, params) {
|
|
4553
|
+
const payload = { flavor_id: params.flavorId };
|
|
4554
|
+
if (params.numBufferNodes !== void 0) payload["num_buffer_nodes"] = params.numBufferNodes;
|
|
4555
|
+
if (params.numMaxUnavailableNodes !== void 0) payload["num_max_unavailable_nodes"] = params.numMaxUnavailableNodes;
|
|
4556
|
+
return this.patchNodeGroup(cluster, nodegroup, "flavor_id", payload);
|
|
4557
|
+
}
|
|
4558
|
+
async setNodeGroupFipAutoBind(cluster, nodegroup, payload) {
|
|
4559
|
+
return this.patchNodeGroup(cluster, nodegroup, "fip_auto_bind", payload);
|
|
4560
|
+
}
|
|
4561
|
+
async setNodeGroupLabels(cluster, nodegroup, payload) {
|
|
4562
|
+
return this.patchNodeGroup(cluster, nodegroup, "k8s_node_labels", payload);
|
|
4563
|
+
}
|
|
4564
|
+
async listAddonTypes() {
|
|
4565
|
+
const raw = await this.getJson("/addon_types");
|
|
4566
|
+
if (!isAddonTypesResponse(raw)) {
|
|
4567
|
+
throw new NhnCloudCliError(
|
|
4568
|
+
"nks addon-type list \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addon_types \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4569
|
+
EXIT_API_ERROR
|
|
4570
|
+
);
|
|
4571
|
+
}
|
|
4572
|
+
return raw.addon_types;
|
|
4573
|
+
}
|
|
4574
|
+
async getAddonType(addonType) {
|
|
4575
|
+
const raw = await this.getJson(`/addon_types/${encodeURIComponent(addonType)}`);
|
|
4576
|
+
if (!isNksAddonType(raw)) {
|
|
4577
|
+
throw new NhnCloudCliError(
|
|
4578
|
+
"nks addon-type get \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addon_type \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4.",
|
|
4579
|
+
EXIT_API_ERROR
|
|
4580
|
+
);
|
|
4581
|
+
}
|
|
4582
|
+
return raw;
|
|
4583
|
+
}
|
|
4584
|
+
async listAddons(filters) {
|
|
4585
|
+
const searchParams = {};
|
|
4586
|
+
if (filters.k8sVersion) searchParams["k8s_version"] = filters.k8sVersion;
|
|
4587
|
+
if (filters.image) searchParams["image"] = filters.image;
|
|
4588
|
+
if (filters.platformVersion) searchParams["platform_version"] = filters.platformVersion;
|
|
4589
|
+
const raw = await this.getJson("/addons", searchParams);
|
|
4590
|
+
if (!isAddonsResponse(raw)) {
|
|
4591
|
+
throw new NhnCloudCliError(
|
|
4592
|
+
"nks addon list \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addons \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4593
|
+
EXIT_API_ERROR
|
|
4594
|
+
);
|
|
4595
|
+
}
|
|
4596
|
+
return raw.addons;
|
|
4597
|
+
}
|
|
4598
|
+
async getAddon(addon) {
|
|
4599
|
+
const raw = await this.getJson(`/addons/${encodeURIComponent(addon)}`);
|
|
4600
|
+
if (!isNksAddon(raw)) {
|
|
4601
|
+
throw new NhnCloudCliError(
|
|
4602
|
+
"nks addon get \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addon \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4.",
|
|
4603
|
+
EXIT_API_ERROR
|
|
4604
|
+
);
|
|
4605
|
+
}
|
|
4606
|
+
return raw;
|
|
4607
|
+
}
|
|
4608
|
+
async listClusterAddons(cluster) {
|
|
4609
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/addons`);
|
|
4610
|
+
if (!isAddonsResponse(raw)) {
|
|
4611
|
+
throw new NhnCloudCliError(
|
|
4612
|
+
"nks cluster addon list \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addons \uBC30\uC5F4\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4613
|
+
EXIT_API_ERROR
|
|
4614
|
+
);
|
|
4615
|
+
}
|
|
4616
|
+
return raw.addons;
|
|
4617
|
+
}
|
|
4618
|
+
async getClusterAddon(cluster, addon) {
|
|
4619
|
+
const raw = await this.getJson(`/clusters/${encodeURIComponent(cluster)}/addons/${encodeURIComponent(addon)}`);
|
|
4620
|
+
if (!isNksAddon(raw)) {
|
|
4621
|
+
throw new NhnCloudCliError(
|
|
4622
|
+
"nks cluster addon get \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 addon \uAC1D\uCCB4\uAC00 \uC544\uB2D9\uB2C8\uB2E4.",
|
|
4623
|
+
EXIT_API_ERROR
|
|
4624
|
+
);
|
|
4625
|
+
}
|
|
4626
|
+
return raw;
|
|
4627
|
+
}
|
|
4628
|
+
async installClusterAddon(cluster, params) {
|
|
4629
|
+
return this.requestUuid(
|
|
4630
|
+
"post",
|
|
4631
|
+
`/clusters/${encodeURIComponent(cluster)}/addons/`,
|
|
4632
|
+
{
|
|
4633
|
+
name: params.name,
|
|
4634
|
+
version: params.version,
|
|
4635
|
+
resolve_conflicts: params.resolveConflicts
|
|
4636
|
+
},
|
|
4637
|
+
"nks cluster addon install \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4638
|
+
);
|
|
4639
|
+
}
|
|
4640
|
+
async updateClusterAddon(cluster, addon, params) {
|
|
4641
|
+
return this.requestUuid(
|
|
4642
|
+
"patch",
|
|
4643
|
+
`/clusters/${encodeURIComponent(cluster)}/addons/${encodeURIComponent(addon)}`,
|
|
4644
|
+
{
|
|
4645
|
+
version: params.version,
|
|
4646
|
+
resolve_conflicts: params.resolveConflicts
|
|
4647
|
+
},
|
|
4648
|
+
"nks cluster addon update \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4649
|
+
);
|
|
4650
|
+
}
|
|
4651
|
+
async removeClusterAddon(cluster, addon) {
|
|
4652
|
+
const url = `${this.nksEndpoint}/clusters/${encodeURIComponent(cluster)}/addons/${encodeURIComponent(addon)}`;
|
|
4653
|
+
try {
|
|
4654
|
+
const raw = await import_ky11.default.delete(url, { headers: this.authHeaders(), retry: 0, timeout: DEFAULT_TIMEOUT_MS7 }).json();
|
|
4655
|
+
if (!isNksUuidResponse(raw)) {
|
|
4656
|
+
throw new NhnCloudCliError(
|
|
4657
|
+
"nks cluster addon remove \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
4658
|
+
EXIT_API_ERROR
|
|
4659
|
+
);
|
|
4660
|
+
}
|
|
4661
|
+
return raw;
|
|
4662
|
+
} catch (err) {
|
|
4663
|
+
throw toNhnCloudCliError(err);
|
|
4664
|
+
}
|
|
4665
|
+
}
|
|
4666
|
+
async getNamedResourceArray(key, path, errorMessage) {
|
|
4667
|
+
const raw = await this.getJson(path);
|
|
4668
|
+
if (!isNamedResourceArrayResponse(key, raw)) {
|
|
4669
|
+
throw new NhnCloudCliError(errorMessage, EXIT_API_ERROR);
|
|
4670
|
+
}
|
|
4671
|
+
return raw[key];
|
|
4672
|
+
}
|
|
4673
|
+
async getFlatNamedResource(path, errorMessage) {
|
|
4674
|
+
const raw = await this.getJson(path);
|
|
4675
|
+
if (!isNksNamedResource(raw)) {
|
|
4676
|
+
throw new NhnCloudCliError(errorMessage, EXIT_API_ERROR);
|
|
4677
|
+
}
|
|
4678
|
+
return raw;
|
|
4679
|
+
}
|
|
4680
|
+
async getJson(path, searchParams) {
|
|
4681
|
+
const url = `${this.nksEndpoint}${path}`;
|
|
4682
|
+
try {
|
|
4683
|
+
return await import_ky11.default.get(url, {
|
|
4684
|
+
headers: this.authHeaders(),
|
|
4685
|
+
searchParams,
|
|
4686
|
+
retry: 0,
|
|
4687
|
+
timeout: DEFAULT_TIMEOUT_MS7
|
|
4688
|
+
}).json();
|
|
4689
|
+
} catch (err) {
|
|
4690
|
+
throw toNhnCloudCliError(err);
|
|
4691
|
+
}
|
|
4692
|
+
}
|
|
4693
|
+
async requestUuid(method, path, payload, errorMessage) {
|
|
4694
|
+
const raw = await this.requestJson(method, path, payload);
|
|
4695
|
+
if (!isNksUuidResponse(raw)) {
|
|
4696
|
+
throw new NhnCloudCliError(errorMessage, EXIT_API_ERROR);
|
|
4697
|
+
}
|
|
4698
|
+
return raw;
|
|
4699
|
+
}
|
|
4700
|
+
async requestNoBody(method, path, payload) {
|
|
4701
|
+
const url = `${this.nksEndpoint}${path}`;
|
|
4702
|
+
try {
|
|
4703
|
+
if (method === "delete") {
|
|
4704
|
+
await import_ky11.default.delete(url, { headers: this.authHeaders(), retry: 0, timeout: DEFAULT_TIMEOUT_MS7 });
|
|
4705
|
+
return;
|
|
4706
|
+
}
|
|
4707
|
+
await import_ky11.default.post(url, { headers: this.authHeaders(), json: payload, retry: 0, timeout: DEFAULT_TIMEOUT_MS7 });
|
|
4708
|
+
} catch (err) {
|
|
4709
|
+
throw toNhnCloudCliError(err);
|
|
4710
|
+
}
|
|
4711
|
+
}
|
|
4712
|
+
async requestJson(method, path, payload) {
|
|
4713
|
+
const url = `${this.nksEndpoint}${path}`;
|
|
4714
|
+
try {
|
|
4715
|
+
const options = { headers: this.authHeaders(), json: payload, retry: 0, timeout: DEFAULT_TIMEOUT_MS7 };
|
|
4716
|
+
return method === "post" ? await import_ky11.default.post(url, options).json() : await import_ky11.default.patch(url, options).json();
|
|
4717
|
+
} catch (err) {
|
|
4718
|
+
throw toNhnCloudCliError(err);
|
|
4719
|
+
}
|
|
4720
|
+
}
|
|
4721
|
+
async patchNodeGroup(cluster, nodegroup, type, payload) {
|
|
4722
|
+
return this.requestUuid(
|
|
4723
|
+
"patch",
|
|
4724
|
+
`/clusters/${encodeURIComponent(cluster)}/nodegroups/${encodeURIComponent(nodegroup)}`,
|
|
4725
|
+
{ ...payload, type },
|
|
4726
|
+
"nks nodegroup patch \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 \u2014 uuid \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
4727
|
+
);
|
|
4728
|
+
}
|
|
4729
|
+
};
|
|
4730
|
+
|
|
4731
|
+
// src/commands/nks/helpers.ts
|
|
4732
|
+
async function resolveNksClient(opts) {
|
|
4733
|
+
const profileName = await resolveProfileName(opts.profile);
|
|
4734
|
+
const iaas = await getIaasCredential(profileName);
|
|
4735
|
+
const effectiveIaas = opts.region ? { ...iaas, region: opts.region } : iaas;
|
|
4736
|
+
const { tokenId, nksEndpoint } = await getIaasToken(profileName, effectiveIaas);
|
|
4737
|
+
return { client: new NksClient(tokenId, nksEndpoint), profileName };
|
|
4738
|
+
}
|
|
4739
|
+
async function readJsonFile(path) {
|
|
4740
|
+
let raw;
|
|
4741
|
+
try {
|
|
4742
|
+
raw = await (0, import_promises4.readFile)(path, "utf-8");
|
|
4743
|
+
} catch (err) {
|
|
4744
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4745
|
+
throw new NhnCloudCliError(`JSON \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${path} (${message})`, EXIT_PARAM_ERROR);
|
|
4746
|
+
}
|
|
4747
|
+
try {
|
|
4748
|
+
const parsed = JSON.parse(raw);
|
|
4749
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
4750
|
+
throw new Error("top-level JSON object required");
|
|
4751
|
+
}
|
|
4752
|
+
return parsed;
|
|
4753
|
+
} catch (err) {
|
|
4754
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4755
|
+
throw new NhnCloudCliError(`JSON \uD30C\uC77C \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4: ${path} (${message})`, EXIT_PARAM_ERROR);
|
|
4756
|
+
}
|
|
4757
|
+
}
|
|
4758
|
+
async function readTextFile(path) {
|
|
4759
|
+
try {
|
|
4760
|
+
return await (0, import_promises4.readFile)(path, "utf-8");
|
|
4761
|
+
} catch (err) {
|
|
4762
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
4763
|
+
throw new NhnCloudCliError(`\uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${path} (${message})`, EXIT_PARAM_ERROR);
|
|
4764
|
+
}
|
|
4765
|
+
}
|
|
4766
|
+
function parsePositiveInteger(value, optionName) {
|
|
4767
|
+
if (!/^[1-9]\d*$/.test(value)) {
|
|
4768
|
+
throw new NhnCloudCliError(`${optionName} \uB294 \uC591\uC758 \uC815\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4: ${JSON.stringify(value)}`, EXIT_PARAM_ERROR);
|
|
4769
|
+
}
|
|
4770
|
+
return Number(value);
|
|
4771
|
+
}
|
|
4772
|
+
function parseNonNegativeInteger(value, optionName) {
|
|
4773
|
+
if (!/^\d+$/.test(value)) {
|
|
4774
|
+
throw new NhnCloudCliError(`${optionName} \uB294 0 \uC774\uC0C1\uC758 \uC815\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4: ${JSON.stringify(value)}`, EXIT_PARAM_ERROR);
|
|
4775
|
+
}
|
|
4776
|
+
return Number(value);
|
|
4777
|
+
}
|
|
4778
|
+
|
|
4779
|
+
// src/commands/nks/supports.ts
|
|
4780
|
+
var supportsCommand = new import_commander38.Command("supports").description("NKS \uC9C0\uC6D0 Kubernetes \uBC84\uC804\uACFC event type \uC744 \uC870\uD68C\uD55C\uB2E4").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (_opts, cmd) => {
|
|
4781
|
+
const opts = cmd.optsWithGlobals();
|
|
4782
|
+
const { client } = await resolveNksClient(opts);
|
|
4783
|
+
startSpinner("NKS \uC9C0\uC6D0 \uC815\uBCF4 \uC870\uD68C \uC911...");
|
|
4784
|
+
let supports;
|
|
4785
|
+
try {
|
|
4786
|
+
supports = await client.supports();
|
|
4787
|
+
} catch (err) {
|
|
4788
|
+
stopSpinner(false);
|
|
4789
|
+
throw err;
|
|
4790
|
+
}
|
|
4791
|
+
stopSpinner(true);
|
|
4792
|
+
output(opts, {
|
|
4793
|
+
headers: ["kubernetes_version", "supported"],
|
|
4794
|
+
rows: Object.entries(supports.supported_k8s).map(([version, supported]) => [
|
|
4795
|
+
version,
|
|
4796
|
+
String(supported)
|
|
4797
|
+
]),
|
|
4798
|
+
raw: supports,
|
|
4799
|
+
ids: Object.keys(supports.supported_k8s)
|
|
4800
|
+
});
|
|
4801
|
+
});
|
|
4802
|
+
|
|
4803
|
+
// src/commands/nks/cluster.ts
|
|
4804
|
+
var import_promises5 = require("fs/promises");
|
|
4805
|
+
var import_commander39 = require("commander");
|
|
4806
|
+
var import_chalk12 = __toESM(require("chalk"));
|
|
4807
|
+
var listCommand6 = new import_commander39.Command("list").description("NKS \uD074\uB7EC\uC2A4\uD130 \uBAA9\uB85D\uC744 \uC870\uD68C\uD55C\uB2E4").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (_opts, cmd) => {
|
|
4808
|
+
const opts = cmd.optsWithGlobals();
|
|
4809
|
+
const { client } = await resolveNksClient(opts);
|
|
4810
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uBAA9\uB85D \uC870\uD68C \uC911...");
|
|
4811
|
+
let clusters;
|
|
4812
|
+
try {
|
|
4813
|
+
clusters = await client.listClusters();
|
|
4814
|
+
} catch (err) {
|
|
4815
|
+
stopSpinner(false);
|
|
4816
|
+
throw err;
|
|
4817
|
+
}
|
|
4818
|
+
stopSpinner(true);
|
|
4819
|
+
output(opts, {
|
|
4820
|
+
headers: ["uuid", "name", "status", "health_status", "node_count", "kube_tag"],
|
|
4821
|
+
rows: clusters.map((cluster) => [
|
|
4822
|
+
cluster.uuid,
|
|
4823
|
+
cluster.name,
|
|
4824
|
+
cluster.status,
|
|
4825
|
+
cluster.health_status,
|
|
4826
|
+
String(cluster.node_count),
|
|
4827
|
+
cluster.kube_tag
|
|
4828
|
+
]),
|
|
4829
|
+
raw: clusters,
|
|
4830
|
+
ids: clusters.map((cluster) => cluster.uuid)
|
|
4831
|
+
});
|
|
4832
|
+
});
|
|
4833
|
+
function resourceId(resource) {
|
|
4834
|
+
return resource.uuid ?? resource.id ?? resource.name ?? "";
|
|
4835
|
+
}
|
|
4836
|
+
function resourceRow(resource) {
|
|
4837
|
+
return [
|
|
4838
|
+
resourceId(resource),
|
|
4839
|
+
resource.name ?? "",
|
|
4840
|
+
resource.status ?? ""
|
|
4841
|
+
];
|
|
4842
|
+
}
|
|
4843
|
+
function addonRow(addon) {
|
|
4844
|
+
return [
|
|
4845
|
+
addon.uuid ?? addon.id ?? addon.name,
|
|
4846
|
+
addon.name,
|
|
4847
|
+
addon.version ?? "",
|
|
4848
|
+
addon.status ?? ""
|
|
4849
|
+
];
|
|
4850
|
+
}
|
|
4851
|
+
function clusterIpAclRow(ipAcl) {
|
|
4852
|
+
return [
|
|
4853
|
+
ipAcl.cluster_uuid,
|
|
4854
|
+
String(ipAcl.enable),
|
|
4855
|
+
ipAcl.action ?? "",
|
|
4856
|
+
String(ipAcl.ipacl_targets?.length ?? 0)
|
|
4857
|
+
];
|
|
4858
|
+
}
|
|
4859
|
+
function uuidOutput(opts, result, label) {
|
|
4860
|
+
process.stderr.write(import_chalk12.default.green(`\u2713 ${label} \uC694\uCCAD \uC644\uB8CC (uuid: ${result.uuid})
|
|
4861
|
+
`));
|
|
4862
|
+
output(opts, {
|
|
4863
|
+
headers: ["field", "value"],
|
|
4864
|
+
rows: [["uuid", result.uuid]],
|
|
4865
|
+
raw: result,
|
|
4866
|
+
ids: [result.uuid]
|
|
4867
|
+
});
|
|
4868
|
+
}
|
|
4869
|
+
async function confirmDangerousAction(message, yes) {
|
|
4870
|
+
const isTTY = process.stdin.isTTY;
|
|
4871
|
+
if (!isTTY && !yes) {
|
|
4872
|
+
throw new NhnCloudCliError(
|
|
4873
|
+
"\uBE44\uB300\uD654\uD615 \uD658\uACBD\uC5D0\uC11C \uC704\uD5D8 \uC791\uC5C5\uC740 --yes \uD50C\uB798\uADF8\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.",
|
|
4874
|
+
EXIT_PARAM_ERROR
|
|
4875
|
+
);
|
|
4876
|
+
}
|
|
4877
|
+
if (!isTTY || yes) return true;
|
|
4878
|
+
const { confirm } = await import("@inquirer/prompts");
|
|
4879
|
+
const ok = await confirm({ message, default: false });
|
|
4880
|
+
if (!ok) {
|
|
4881
|
+
process.stderr.write(import_chalk12.default.yellow("\uC791\uC5C5\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\n"));
|
|
4882
|
+
}
|
|
4883
|
+
return ok;
|
|
4884
|
+
}
|
|
4885
|
+
async function writeKubeconfigFile(path, contents, force) {
|
|
4886
|
+
try {
|
|
4887
|
+
await (0, import_promises5.writeFile)(path, contents, {
|
|
4888
|
+
encoding: "utf-8",
|
|
4889
|
+
mode: 384,
|
|
4890
|
+
flag: force ? "w" : "wx"
|
|
4891
|
+
});
|
|
4892
|
+
await (0, import_promises5.chmod)(path, 384);
|
|
4893
|
+
} catch (err) {
|
|
4894
|
+
if (err instanceof Error && "code" in err && err.code === "EEXIST") {
|
|
4895
|
+
throw new NhnCloudCliError(
|
|
4896
|
+
`\uD30C\uC77C\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4: ${path}. \uB36E\uC5B4\uC4F0\uB824\uBA74 --force \uB97C \uC9C0\uC815\uD558\uC138\uC694.`,
|
|
4897
|
+
EXIT_PARAM_ERROR
|
|
4898
|
+
);
|
|
4899
|
+
}
|
|
4900
|
+
throw err;
|
|
4901
|
+
}
|
|
4902
|
+
}
|
|
4903
|
+
var createCommand4 = new import_commander39.Command("create").description("NKS \uD074\uB7EC\uC2A4\uD130\uB97C \uC0DD\uC131\uD55C\uB2E4").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (_opts, cmd) => {
|
|
4904
|
+
const opts = cmd.optsWithGlobals();
|
|
4905
|
+
const payload = await readJsonFile(opts.file);
|
|
4906
|
+
const { client } = await resolveNksClient(opts);
|
|
4907
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC0DD\uC131 \uC694\uCCAD \uC911...");
|
|
4908
|
+
let result;
|
|
4909
|
+
try {
|
|
4910
|
+
result = await client.createCluster(payload);
|
|
4911
|
+
} catch (err) {
|
|
4912
|
+
stopSpinner(false);
|
|
4913
|
+
throw err;
|
|
4914
|
+
}
|
|
4915
|
+
stopSpinner(true);
|
|
4916
|
+
uuidOutput(opts, result, "\uD074\uB7EC\uC2A4\uD130 \uC0DD\uC131");
|
|
4917
|
+
});
|
|
4918
|
+
var deleteCommand3 = new import_commander39.Command("delete").description("NKS \uD074\uB7EC\uC2A4\uD130\uB97C \uC0AD\uC81C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--yes", "\uD655\uC778 \uD504\uB86C\uD504\uD2B8 \uC0DD\uB7B5 (CI/\uBE44\uB300\uD654\uD615 \uD544\uC218)").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
4919
|
+
const opts = cmd.optsWithGlobals();
|
|
4920
|
+
const ok = await confirmDangerousAction(`NKS \uD074\uB7EC\uC2A4\uD130 "${cluster}" \uB97C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?`, opts.yes);
|
|
4921
|
+
if (!ok) return;
|
|
4922
|
+
const { client } = await resolveNksClient(opts);
|
|
4923
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC0AD\uC81C \uC694\uCCAD \uC911...");
|
|
4924
|
+
try {
|
|
4925
|
+
await client.deleteCluster(cluster);
|
|
4926
|
+
} catch (err) {
|
|
4927
|
+
stopSpinner(false);
|
|
4928
|
+
throw err;
|
|
4929
|
+
}
|
|
4930
|
+
stopSpinner(true);
|
|
4931
|
+
process.stderr.write(import_chalk12.default.green(`\u2713 NKS \uD074\uB7EC\uC2A4\uD130 "${cluster}" \uC0AD\uC81C \uC694\uCCAD \uC644\uB8CC
|
|
4932
|
+
`));
|
|
4933
|
+
});
|
|
4934
|
+
var resizeCommand2 = new import_commander39.Command("resize").description("NKS \uD074\uB7EC\uC2A4\uD130 \uB178\uB4DC \uADF8\uB8F9 \uD06C\uAE30\uB97C \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--nodegroup <name-or-uuid>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--node-count <n>", "\uBCC0\uACBD\uD560 \uB178\uB4DC \uC218").option("--nodes-to-remove <csv>", "\uC0AD\uC81C\uD560 \uB178\uB4DC \uC774\uB984/ID CSV").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
4935
|
+
const opts = cmd.optsWithGlobals();
|
|
4936
|
+
const nodeCount = parsePositiveInteger(opts.nodeCount, "--node-count");
|
|
4937
|
+
const nodesToRemove = opts.nodesToRemove?.split(",").map((node) => node.trim()).filter(Boolean);
|
|
4938
|
+
if (!nodesToRemove || nodesToRemove.length === 0) {
|
|
4939
|
+
process.stderr.write(import_chalk12.default.yellow("\uC8FC\uC758: --nodes-to-remove \uAC00 \uC5C6\uC73C\uBA74 \uAC10\uCD95 \uC2DC API\uAC00 \uC0AD\uC81C \uB178\uB4DC\uB97C \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n"));
|
|
4940
|
+
}
|
|
4941
|
+
const { client } = await resolveNksClient(opts);
|
|
4942
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 resize \uC694\uCCAD \uC911...");
|
|
4943
|
+
let result;
|
|
4944
|
+
try {
|
|
4945
|
+
result = await client.resizeCluster({
|
|
4946
|
+
cluster,
|
|
4947
|
+
nodegroup: opts.nodegroup,
|
|
4948
|
+
nodeCount,
|
|
4949
|
+
nodesToRemove
|
|
4950
|
+
});
|
|
4951
|
+
} catch (err) {
|
|
4952
|
+
stopSpinner(false);
|
|
4953
|
+
throw err;
|
|
4954
|
+
}
|
|
4955
|
+
stopSpinner(true);
|
|
4956
|
+
uuidOutput(opts, result, "\uD074\uB7EC\uC2A4\uD130 resize");
|
|
4957
|
+
});
|
|
4958
|
+
var setIpAclCommand = new import_commander39.Command("set-ipacl").description("NKS \uD074\uB7EC\uC2A4\uD130 API endpoint IP ACL \uC744 \uC124\uC815\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
4959
|
+
const opts = cmd.optsWithGlobals();
|
|
4960
|
+
const payload = await readJsonFile(opts.file);
|
|
4961
|
+
const { client } = await resolveNksClient(opts);
|
|
4962
|
+
startSpinner("NKS IP ACL \uC124\uC815 \uC694\uCCAD \uC911...");
|
|
4963
|
+
let result;
|
|
4964
|
+
try {
|
|
4965
|
+
result = await client.setClusterIpAcl(cluster, payload);
|
|
4966
|
+
} catch (err) {
|
|
4967
|
+
stopSpinner(false);
|
|
4968
|
+
throw err;
|
|
4969
|
+
}
|
|
4970
|
+
stopSpinner(true);
|
|
4971
|
+
uuidOutput(opts, result, "IP ACL \uC124\uC815");
|
|
4972
|
+
});
|
|
4973
|
+
var renewCertificateCommand = new import_commander39.Command("renew-certificate").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC778\uC99D\uC11C\uB97C \uAC31\uC2E0\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--term-of-validity <1-5>", "\uC778\uC99D\uC11C \uC720\uD6A8 \uAE30\uAC04(\uB144)").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
4974
|
+
const opts = cmd.optsWithGlobals();
|
|
4975
|
+
const term = parsePositiveInteger(opts.termOfValidity, "--term-of-validity");
|
|
4976
|
+
if (term < 1 || term > 5) {
|
|
4977
|
+
throw new NhnCloudCliError("--term-of-validity \uB294 1~5 \uC0AC\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4.", EXIT_PARAM_ERROR);
|
|
4978
|
+
}
|
|
4979
|
+
const { client } = await resolveNksClient(opts);
|
|
4980
|
+
startSpinner("NKS \uC778\uC99D\uC11C \uAC31\uC2E0 \uC694\uCCAD \uC911...");
|
|
4981
|
+
let result;
|
|
4982
|
+
try {
|
|
4983
|
+
result = await client.renewClusterCertificate(cluster, term);
|
|
4984
|
+
} catch (err) {
|
|
4985
|
+
stopSpinner(false);
|
|
4986
|
+
throw err;
|
|
4987
|
+
}
|
|
4988
|
+
stopSpinner(true);
|
|
4989
|
+
uuidOutput(opts, result, "\uC778\uC99D\uC11C \uAC31\uC2E0");
|
|
4990
|
+
});
|
|
4991
|
+
var updateSgwCommand = new import_commander39.Command("update-sgw").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC11C\uBE44\uC2A4 \uAC8C\uC774\uD2B8\uC6E8\uC774\uB97C \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--ncr-sgw <uuid>", "NCR service gateway UUID").requiredOption("--obs-sgw <uuid>", "Object Storage service gateway UUID").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
4992
|
+
const opts = cmd.optsWithGlobals();
|
|
4993
|
+
const { client } = await resolveNksClient(opts);
|
|
4994
|
+
startSpinner("NKS \uC11C\uBE44\uC2A4 \uAC8C\uC774\uD2B8\uC6E8\uC774 \uBCC0\uACBD \uC694\uCCAD \uC911...");
|
|
4995
|
+
let result;
|
|
4996
|
+
try {
|
|
4997
|
+
result = await client.updateClusterServiceGateway(cluster, opts.ncrSgw, opts.obsSgw);
|
|
4998
|
+
} catch (err) {
|
|
4999
|
+
stopSpinner(false);
|
|
5000
|
+
throw err;
|
|
5001
|
+
}
|
|
5002
|
+
stopSpinner(true);
|
|
5003
|
+
uuidOutput(opts, result, "\uC11C\uBE44\uC2A4 \uAC8C\uC774\uD2B8\uC6E8\uC774 \uBCC0\uACBD");
|
|
5004
|
+
});
|
|
5005
|
+
var setControlPlaneLogCommand = new import_commander39.Command("set-control-plane-log").description("NKS \uD074\uB7EC\uC2A4\uD130 control plane log \uC124\uC815\uC744 \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "control_plane_log \uAC1D\uCCB4 JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5006
|
+
const opts = cmd.optsWithGlobals();
|
|
5007
|
+
const controlPlaneLog = await readJsonFile(opts.file);
|
|
5008
|
+
const { client } = await resolveNksClient(opts);
|
|
5009
|
+
startSpinner("NKS control plane log \uC124\uC815 \uC694\uCCAD \uC911...");
|
|
5010
|
+
let result;
|
|
5011
|
+
try {
|
|
5012
|
+
result = await client.setControlPlaneLog(cluster, controlPlaneLog);
|
|
5013
|
+
} catch (err) {
|
|
5014
|
+
stopSpinner(false);
|
|
5015
|
+
throw err;
|
|
5016
|
+
}
|
|
5017
|
+
stopSpinner(true);
|
|
5018
|
+
uuidOutput(opts, result, "control plane log \uC124\uC815");
|
|
5019
|
+
});
|
|
5020
|
+
var getCommand4 = new import_commander39.Command("get").description("NKS \uD074\uB7EC\uC2A4\uD130\uB97C \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5021
|
+
const opts = cmd.optsWithGlobals();
|
|
5022
|
+
const { client } = await resolveNksClient(opts);
|
|
5023
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC870\uD68C \uC911...");
|
|
5024
|
+
let result;
|
|
5025
|
+
try {
|
|
5026
|
+
result = await client.getCluster(cluster);
|
|
5027
|
+
} catch (err) {
|
|
5028
|
+
stopSpinner(false);
|
|
5029
|
+
throw err;
|
|
5030
|
+
}
|
|
5031
|
+
stopSpinner(true);
|
|
5032
|
+
output(opts, {
|
|
5033
|
+
headers: ["id", "name", "status"],
|
|
5034
|
+
rows: [resourceRow(result)],
|
|
5035
|
+
raw: result,
|
|
5036
|
+
ids: [resourceId(result)]
|
|
5037
|
+
});
|
|
5038
|
+
});
|
|
5039
|
+
var eventsCommand = new import_commander39.Command("events").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC791\uC5C5 \uC774\uB825\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5040
|
+
const opts = cmd.optsWithGlobals();
|
|
5041
|
+
const { client } = await resolveNksClient(opts);
|
|
5042
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC791\uC5C5 \uC774\uB825 \uC870\uD68C \uC911...");
|
|
5043
|
+
let events;
|
|
5044
|
+
try {
|
|
5045
|
+
events = await client.listClusterEvents(cluster);
|
|
5046
|
+
} catch (err) {
|
|
5047
|
+
stopSpinner(false);
|
|
5048
|
+
throw err;
|
|
5049
|
+
}
|
|
5050
|
+
stopSpinner(true);
|
|
5051
|
+
output(opts, {
|
|
5052
|
+
headers: ["id", "name", "status"],
|
|
5053
|
+
rows: events.map(resourceRow),
|
|
5054
|
+
raw: events,
|
|
5055
|
+
ids: events.map(resourceId)
|
|
5056
|
+
});
|
|
5057
|
+
});
|
|
5058
|
+
var eventCommand = new import_commander39.Command("event").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC791\uC5C5 \uC774\uB825 \uB2E8\uAC74\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<event>", "\uC791\uC5C5 \uC774\uB825 UUID \uB610\uB294 ID").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, event, _opts, cmd) => {
|
|
5059
|
+
const opts = cmd.optsWithGlobals();
|
|
5060
|
+
const { client } = await resolveNksClient(opts);
|
|
5061
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC791\uC5C5 \uC774\uB825 \uC870\uD68C \uC911...");
|
|
5062
|
+
let result;
|
|
5063
|
+
try {
|
|
5064
|
+
result = await client.getClusterEvent(cluster, event);
|
|
5065
|
+
} catch (err) {
|
|
5066
|
+
stopSpinner(false);
|
|
5067
|
+
throw err;
|
|
5068
|
+
}
|
|
5069
|
+
stopSpinner(true);
|
|
5070
|
+
output(opts, {
|
|
5071
|
+
headers: ["id", "name", "status"],
|
|
5072
|
+
rows: [resourceRow(result)],
|
|
5073
|
+
raw: result,
|
|
5074
|
+
ids: [resourceId(result)]
|
|
5075
|
+
});
|
|
5076
|
+
});
|
|
5077
|
+
var kubeconfigCommand = new import_commander39.Command("kubeconfig").description("NKS \uD074\uB7EC\uC2A4\uD130 kubeconfig \uB97C \uCD9C\uB825\uD558\uAC70\uB098 \uC800\uC7A5\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--output <file>", "kubeconfig \uC800\uC7A5 \uACBD\uB85C").option("--force", "\uAE30\uC874 \uD30C\uC77C \uB36E\uC5B4\uC4F0\uAE30").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5078
|
+
const opts = cmd.optsWithGlobals();
|
|
5079
|
+
const { client } = await resolveNksClient(opts);
|
|
5080
|
+
startSpinner("NKS kubeconfig \uC870\uD68C \uC911...");
|
|
5081
|
+
let kubeconfig;
|
|
5082
|
+
try {
|
|
5083
|
+
kubeconfig = await client.getClusterKubeconfig(cluster);
|
|
5084
|
+
} catch (err) {
|
|
5085
|
+
stopSpinner(false);
|
|
5086
|
+
throw err;
|
|
5087
|
+
}
|
|
5088
|
+
stopSpinner(true);
|
|
5089
|
+
if (opts.output) {
|
|
5090
|
+
await writeKubeconfigFile(opts.output, kubeconfig, opts.force);
|
|
5091
|
+
process.stderr.write(import_chalk12.default.green(`\u2713 kubeconfig \uB97C \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4: ${opts.output}
|
|
5092
|
+
`));
|
|
5093
|
+
return;
|
|
5094
|
+
}
|
|
5095
|
+
process.stdout.write(kubeconfig.endsWith("\n") ? kubeconfig : kubeconfig + "\n");
|
|
5096
|
+
});
|
|
5097
|
+
var ipAclCommand = new import_commander39.Command("ipacl").description("NKS \uD074\uB7EC\uC2A4\uD130 API endpoint IP ACL \uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5098
|
+
const opts = cmd.optsWithGlobals();
|
|
5099
|
+
const { client } = await resolveNksClient(opts);
|
|
5100
|
+
startSpinner("NKS IP ACL \uC870\uD68C \uC911...");
|
|
5101
|
+
let result;
|
|
5102
|
+
try {
|
|
5103
|
+
result = await client.getClusterIpAcl(cluster);
|
|
5104
|
+
} catch (err) {
|
|
5105
|
+
stopSpinner(false);
|
|
5106
|
+
throw err;
|
|
5107
|
+
}
|
|
5108
|
+
stopSpinner(true);
|
|
5109
|
+
output(opts, {
|
|
5110
|
+
headers: ["cluster_uuid", "enable", "action", "target_count"],
|
|
5111
|
+
rows: [clusterIpAclRow(result)],
|
|
5112
|
+
raw: result,
|
|
5113
|
+
ids: [result.cluster_uuid]
|
|
5114
|
+
});
|
|
5115
|
+
});
|
|
5116
|
+
var clusterAddonListCommand = new import_commander39.Command("list").description("NKS \uD074\uB7EC\uC2A4\uD130\uC5D0 \uC124\uCE58\uB41C \uC560\uB4DC\uC628 \uBAA9\uB85D\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5117
|
+
const opts = cmd.optsWithGlobals();
|
|
5118
|
+
const { client } = await resolveNksClient(opts);
|
|
5119
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uBAA9\uB85D \uC870\uD68C \uC911...");
|
|
5120
|
+
let addons;
|
|
5121
|
+
try {
|
|
5122
|
+
addons = await client.listClusterAddons(cluster);
|
|
5123
|
+
} catch (err) {
|
|
5124
|
+
stopSpinner(false);
|
|
5125
|
+
throw err;
|
|
5126
|
+
}
|
|
5127
|
+
stopSpinner(true);
|
|
5128
|
+
output(opts, {
|
|
5129
|
+
headers: ["id", "name", "version", "status"],
|
|
5130
|
+
rows: addons.map(addonRow),
|
|
5131
|
+
raw: addons,
|
|
5132
|
+
ids: addons.map((addon) => addon.uuid ?? addon.id ?? addon.name)
|
|
5133
|
+
});
|
|
5134
|
+
});
|
|
5135
|
+
var clusterAddonGetCommand = new import_commander39.Command("get").description("NKS \uD074\uB7EC\uC2A4\uD130\uC5D0 \uC124\uCE58\uB41C \uC560\uB4DC\uC628\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<addon>", "\uC560\uB4DC\uC628 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, addon, _opts, cmd) => {
|
|
5136
|
+
const opts = cmd.optsWithGlobals();
|
|
5137
|
+
const { client } = await resolveNksClient(opts);
|
|
5138
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC870\uD68C \uC911...");
|
|
5139
|
+
let result;
|
|
5140
|
+
try {
|
|
5141
|
+
result = await client.getClusterAddon(cluster, addon);
|
|
5142
|
+
} catch (err) {
|
|
5143
|
+
stopSpinner(false);
|
|
5144
|
+
throw err;
|
|
5145
|
+
}
|
|
5146
|
+
stopSpinner(true);
|
|
5147
|
+
output(opts, {
|
|
5148
|
+
headers: ["id", "name", "version", "status"],
|
|
5149
|
+
rows: [addonRow(result)],
|
|
5150
|
+
raw: result,
|
|
5151
|
+
ids: [result.uuid ?? result.id ?? result.name]
|
|
5152
|
+
});
|
|
5153
|
+
});
|
|
5154
|
+
function parseResolveConflicts(value) {
|
|
5155
|
+
if (value === "none" || value === "overwrite" || value === "preserve") {
|
|
5156
|
+
return value;
|
|
5157
|
+
}
|
|
5158
|
+
throw new NhnCloudCliError(
|
|
5159
|
+
`--resolve-conflicts \uB294 none, overwrite, preserve \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4: ${JSON.stringify(value)}`,
|
|
5160
|
+
EXIT_PARAM_ERROR
|
|
5161
|
+
);
|
|
5162
|
+
}
|
|
5163
|
+
var clusterAddonInstallCommand = new import_commander39.Command("install").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628\uC744 \uC124\uCE58\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--name <name>", "\uC560\uB4DC\uC628 \uC774\uB984").requiredOption("--version <version>", "\uC560\uB4DC\uC628 \uBC84\uC804").requiredOption("--resolve-conflicts <none|overwrite|preserve>", "\uCDA9\uB3CC \uD574\uACB0 \uC815\uCC45").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5164
|
+
const opts = cmd.optsWithGlobals();
|
|
5165
|
+
const resolveConflicts = parseResolveConflicts(opts.resolveConflicts);
|
|
5166
|
+
const { client } = await resolveNksClient(opts);
|
|
5167
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC124\uCE58 \uC694\uCCAD \uC911...");
|
|
5168
|
+
let result;
|
|
5169
|
+
try {
|
|
5170
|
+
result = await client.installClusterAddon(cluster, {
|
|
5171
|
+
name: opts.name,
|
|
5172
|
+
version: opts.version,
|
|
5173
|
+
resolveConflicts
|
|
5174
|
+
});
|
|
5175
|
+
} catch (err) {
|
|
5176
|
+
stopSpinner(false);
|
|
5177
|
+
throw err;
|
|
5178
|
+
}
|
|
5179
|
+
stopSpinner(true);
|
|
5180
|
+
uuidOutput(opts, result, "\uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC124\uCE58");
|
|
5181
|
+
});
|
|
5182
|
+
var clusterAddonUpdateCommand = new import_commander39.Command("update").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628\uC744 \uC5C5\uB370\uC774\uD2B8\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<addon>", "\uC560\uB4DC\uC628 UUID \uB610\uB294 \uC774\uB984").requiredOption("--version <version>", "\uC560\uB4DC\uC628 \uBC84\uC804").requiredOption("--resolve-conflicts <none|overwrite|preserve>", "\uCDA9\uB3CC \uD574\uACB0 \uC815\uCC45").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, addon, _opts, cmd) => {
|
|
5183
|
+
const opts = cmd.optsWithGlobals();
|
|
5184
|
+
const resolveConflicts = parseResolveConflicts(opts.resolveConflicts);
|
|
5185
|
+
const { client } = await resolveNksClient(opts);
|
|
5186
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC5C5\uB370\uC774\uD2B8 \uC694\uCCAD \uC911...");
|
|
5187
|
+
let result;
|
|
5188
|
+
try {
|
|
5189
|
+
result = await client.updateClusterAddon(cluster, addon, {
|
|
5190
|
+
version: opts.version,
|
|
5191
|
+
resolveConflicts
|
|
5192
|
+
});
|
|
5193
|
+
} catch (err) {
|
|
5194
|
+
stopSpinner(false);
|
|
5195
|
+
throw err;
|
|
5196
|
+
}
|
|
5197
|
+
stopSpinner(true);
|
|
5198
|
+
uuidOutput(opts, result, "\uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC5C5\uB370\uC774\uD2B8");
|
|
5199
|
+
});
|
|
5200
|
+
var clusterAddonRemoveCommand = new import_commander39.Command("remove").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628\uC744 \uC81C\uAC70\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<addon>", "\uC560\uB4DC\uC628 UUID \uB610\uB294 \uC774\uB984").option("--yes", "\uD655\uC778 \uD504\uB86C\uD504\uD2B8 \uC0DD\uB7B5 (CI/\uBE44\uB300\uD654\uD615 \uD544\uC218)").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, addon, _opts, cmd) => {
|
|
5201
|
+
const opts = cmd.optsWithGlobals();
|
|
5202
|
+
const ok = await confirmDangerousAction(`NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 "${addon}" \uC744 \uC81C\uAC70\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?`, opts.yes);
|
|
5203
|
+
if (!ok) return;
|
|
5204
|
+
const { client } = await resolveNksClient(opts);
|
|
5205
|
+
startSpinner("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC81C\uAC70 \uC694\uCCAD \uC911...");
|
|
5206
|
+
let result;
|
|
5207
|
+
try {
|
|
5208
|
+
result = await client.removeClusterAddon(cluster, addon);
|
|
5209
|
+
} catch (err) {
|
|
5210
|
+
stopSpinner(false);
|
|
5211
|
+
throw err;
|
|
5212
|
+
}
|
|
5213
|
+
stopSpinner(true);
|
|
5214
|
+
uuidOutput(opts, result, "\uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uC81C\uAC70");
|
|
5215
|
+
});
|
|
5216
|
+
var clusterAddonCommand = new import_commander39.Command("addon").description("NKS \uD074\uB7EC\uC2A4\uD130 \uC560\uB4DC\uC628 \uAD00\uB828 \uBA85\uB839").addCommand(clusterAddonListCommand).addCommand(clusterAddonGetCommand).addCommand(clusterAddonInstallCommand).addCommand(clusterAddonUpdateCommand).addCommand(clusterAddonRemoveCommand);
|
|
5217
|
+
var clusterCommand = new import_commander39.Command("cluster").description("NKS \uD074\uB7EC\uC2A4\uD130 \uAD00\uB828 \uBA85\uB839").addCommand(listCommand6).addCommand(getCommand4).addCommand(createCommand4).addCommand(deleteCommand3).addCommand(resizeCommand2).addCommand(eventsCommand).addCommand(eventCommand).addCommand(kubeconfigCommand).addCommand(ipAclCommand).addCommand(setIpAclCommand).addCommand(renewCertificateCommand).addCommand(updateSgwCommand).addCommand(setControlPlaneLogCommand).addCommand(clusterAddonCommand);
|
|
5218
|
+
|
|
5219
|
+
// src/commands/nks/nodegroup.ts
|
|
5220
|
+
var import_commander40 = require("commander");
|
|
5221
|
+
var import_chalk13 = __toESM(require("chalk"));
|
|
5222
|
+
function nodeGroupRow(nodegroup) {
|
|
5223
|
+
return [
|
|
5224
|
+
nodegroup.uuid,
|
|
5225
|
+
nodegroup.name,
|
|
5226
|
+
nodegroup.status,
|
|
5227
|
+
String(nodegroup["node_count"] ?? ""),
|
|
5228
|
+
String(nodegroup["flavor_id"] ?? "")
|
|
5229
|
+
];
|
|
5230
|
+
}
|
|
5231
|
+
function rawObjectRows(resource) {
|
|
5232
|
+
return Object.entries(resource).map(([key, value]) => [
|
|
5233
|
+
key,
|
|
5234
|
+
typeof value === "object" && value !== null ? JSON.stringify(value) : String(value)
|
|
5235
|
+
]);
|
|
5236
|
+
}
|
|
5237
|
+
function uuidOutput2(opts, result, label) {
|
|
5238
|
+
process.stderr.write(import_chalk13.default.green(`\u2713 ${label} \uC694\uCCAD \uC644\uB8CC (uuid: ${result.uuid})
|
|
5239
|
+
`));
|
|
5240
|
+
output(opts, {
|
|
5241
|
+
headers: ["field", "value"],
|
|
5242
|
+
rows: [["uuid", result.uuid]],
|
|
5243
|
+
raw: result,
|
|
5244
|
+
ids: [result.uuid]
|
|
5245
|
+
});
|
|
5246
|
+
}
|
|
5247
|
+
function parseCsv(value, optionName) {
|
|
5248
|
+
const values = value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
5249
|
+
if (values.length === 0) {
|
|
5250
|
+
throw new NhnCloudCliError(`${optionName} \uB294 \uBE44\uC5B4 \uC788\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`, EXIT_PARAM_ERROR);
|
|
5251
|
+
}
|
|
5252
|
+
return values;
|
|
5253
|
+
}
|
|
5254
|
+
function optionalPositiveInteger(value, optionName) {
|
|
5255
|
+
return value === void 0 ? void 0 : parsePositiveInteger(value, optionName);
|
|
5256
|
+
}
|
|
5257
|
+
function optionalNonNegativeInteger(value, optionName) {
|
|
5258
|
+
return value === void 0 ? void 0 : parseNonNegativeInteger(value, optionName);
|
|
5259
|
+
}
|
|
5260
|
+
async function confirmDangerousAction2(message, yes) {
|
|
5261
|
+
const isTTY = process.stdin.isTTY;
|
|
5262
|
+
if (!isTTY && !yes) {
|
|
5263
|
+
throw new NhnCloudCliError(
|
|
5264
|
+
"\uBE44\uB300\uD654\uD615 \uD658\uACBD\uC5D0\uC11C \uC704\uD5D8 \uC791\uC5C5\uC740 --yes \uD50C\uB798\uADF8\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.",
|
|
5265
|
+
EXIT_PARAM_ERROR
|
|
5266
|
+
);
|
|
5267
|
+
}
|
|
5268
|
+
if (!isTTY || yes) return true;
|
|
5269
|
+
const { confirm } = await import("@inquirer/prompts");
|
|
5270
|
+
const ok = await confirm({ message, default: false });
|
|
5271
|
+
if (!ok) process.stderr.write(import_chalk13.default.yellow("\uC791\uC5C5\uC774 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\n"));
|
|
5272
|
+
return ok;
|
|
5273
|
+
}
|
|
5274
|
+
var listCommand7 = new import_commander40.Command("list").description("NKS \uB178\uB4DC \uADF8\uB8F9 \uBAA9\uB85D\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5275
|
+
const opts = cmd.optsWithGlobals();
|
|
5276
|
+
const { client } = await resolveNksClient(opts);
|
|
5277
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 \uBAA9\uB85D \uC870\uD68C \uC911...");
|
|
5278
|
+
let nodegroups;
|
|
5279
|
+
try {
|
|
5280
|
+
nodegroups = await client.listNodeGroups(cluster);
|
|
5281
|
+
} catch (err) {
|
|
5282
|
+
stopSpinner(false);
|
|
5283
|
+
throw err;
|
|
5284
|
+
}
|
|
5285
|
+
stopSpinner(true);
|
|
5286
|
+
output(opts, {
|
|
5287
|
+
headers: ["uuid", "name", "status", "node_count", "flavor_id"],
|
|
5288
|
+
rows: nodegroups.map(nodeGroupRow),
|
|
5289
|
+
raw: nodegroups,
|
|
5290
|
+
ids: nodegroups.map((nodegroup) => nodegroup.uuid)
|
|
5291
|
+
});
|
|
5292
|
+
});
|
|
5293
|
+
var getCommand5 = new import_commander40.Command("get").description("NKS \uB178\uB4DC \uADF8\uB8F9\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5294
|
+
const opts = cmd.optsWithGlobals();
|
|
5295
|
+
const { client } = await resolveNksClient(opts);
|
|
5296
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 \uC870\uD68C \uC911...");
|
|
5297
|
+
let result;
|
|
5298
|
+
try {
|
|
5299
|
+
result = await client.getNodeGroup(cluster, nodegroup);
|
|
5300
|
+
} catch (err) {
|
|
5301
|
+
stopSpinner(false);
|
|
5302
|
+
throw err;
|
|
5303
|
+
}
|
|
5304
|
+
stopSpinner(true);
|
|
5305
|
+
output(opts, {
|
|
5306
|
+
headers: ["uuid", "name", "status", "node_count", "flavor_id"],
|
|
5307
|
+
rows: [nodeGroupRow(result)],
|
|
5308
|
+
raw: result,
|
|
5309
|
+
ids: [result.uuid]
|
|
5310
|
+
});
|
|
5311
|
+
});
|
|
5312
|
+
var createCommand5 = new import_commander40.Command("create").description("NKS \uB178\uB4DC \uADF8\uB8F9\uC744 \uC0DD\uC131\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, _opts, cmd) => {
|
|
5313
|
+
const opts = cmd.optsWithGlobals();
|
|
5314
|
+
const payload = await readJsonFile(opts.file);
|
|
5315
|
+
const { client } = await resolveNksClient(opts);
|
|
5316
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 \uC0DD\uC131 \uC694\uCCAD \uC911...");
|
|
5317
|
+
let result;
|
|
5318
|
+
try {
|
|
5319
|
+
result = await client.createNodeGroup(cluster, payload);
|
|
5320
|
+
} catch (err) {
|
|
5321
|
+
stopSpinner(false);
|
|
5322
|
+
throw err;
|
|
5323
|
+
}
|
|
5324
|
+
stopSpinner(true);
|
|
5325
|
+
uuidOutput2(opts, result, "\uB178\uB4DC \uADF8\uB8F9 \uC0DD\uC131");
|
|
5326
|
+
});
|
|
5327
|
+
var deleteCommand4 = new import_commander40.Command("delete").description("NKS \uB178\uB4DC \uADF8\uB8F9\uC744 \uC0AD\uC81C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").option("--yes", "\uD655\uC778 \uD504\uB86C\uD504\uD2B8 \uC0DD\uB7B5 (CI/\uBE44\uB300\uD654\uD615 \uD544\uC218)").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5328
|
+
const opts = cmd.optsWithGlobals();
|
|
5329
|
+
const ok = await confirmDangerousAction2(`NKS \uB178\uB4DC \uADF8\uB8F9 "${nodegroup}" \uB97C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?`, opts.yes);
|
|
5330
|
+
if (!ok) return;
|
|
5331
|
+
const { client } = await resolveNksClient(opts);
|
|
5332
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 \uC0AD\uC81C \uC694\uCCAD \uC911...");
|
|
5333
|
+
try {
|
|
5334
|
+
await client.deleteNodeGroup(cluster, nodegroup);
|
|
5335
|
+
} catch (err) {
|
|
5336
|
+
stopSpinner(false);
|
|
5337
|
+
throw err;
|
|
5338
|
+
}
|
|
5339
|
+
stopSpinner(true);
|
|
5340
|
+
process.stderr.write(import_chalk13.default.green(`\u2713 NKS \uB178\uB4DC \uADF8\uB8F9 "${nodegroup}" \uC0AD\uC81C \uC694\uCCAD \uC644\uB8CC
|
|
5341
|
+
`));
|
|
5342
|
+
});
|
|
5343
|
+
function nodeActionCommand(name) {
|
|
5344
|
+
return new import_commander40.Command(name).description(`NKS \uB178\uB4DC \uADF8\uB8F9 \uB178\uB4DC\uB97C ${name === "stop-node" ? "\uC911\uC9C0" : "\uC2DC\uC791"}\uD55C\uB2E4`).argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--nodes <csv>", "\uB300\uC0C1 \uB178\uB4DC CSV").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5345
|
+
const opts = cmd.optsWithGlobals();
|
|
5346
|
+
const nodes = parseCsv(opts.nodes, "--nodes");
|
|
5347
|
+
const { client } = await resolveNksClient(opts);
|
|
5348
|
+
startSpinner(`NKS \uB178\uB4DC ${name === "stop-node" ? "\uC911\uC9C0" : "\uC2DC\uC791"} \uC694\uCCAD \uC911...`);
|
|
5349
|
+
let result;
|
|
5350
|
+
try {
|
|
5351
|
+
result = name === "stop-node" ? await client.stopNodeGroupNodes(cluster, nodegroup, nodes) : await client.startNodeGroupNodes(cluster, nodegroup, nodes);
|
|
5352
|
+
} catch (err) {
|
|
5353
|
+
stopSpinner(false);
|
|
5354
|
+
throw err;
|
|
5355
|
+
}
|
|
5356
|
+
stopSpinner(true);
|
|
5357
|
+
uuidOutput2(opts, result, `\uB178\uB4DC ${name === "stop-node" ? "\uC911\uC9C0" : "\uC2DC\uC791"}`);
|
|
5358
|
+
});
|
|
5359
|
+
}
|
|
5360
|
+
var autoscaleCommand = new import_commander40.Command("autoscale").description("NKS \uB178\uB4DC \uADF8\uB8F9 autoscale \uC124\uC815\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5361
|
+
const opts = cmd.optsWithGlobals();
|
|
5362
|
+
const { client } = await resolveNksClient(opts);
|
|
5363
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 autoscale \uC870\uD68C \uC911...");
|
|
5364
|
+
let result;
|
|
5365
|
+
try {
|
|
5366
|
+
result = await client.getNodeGroupAutoscale(cluster, nodegroup);
|
|
5367
|
+
} catch (err) {
|
|
5368
|
+
stopSpinner(false);
|
|
5369
|
+
throw err;
|
|
5370
|
+
}
|
|
5371
|
+
stopSpinner(true);
|
|
5372
|
+
output(opts, {
|
|
5373
|
+
headers: ["field", "value"],
|
|
5374
|
+
rows: rawObjectRows(result),
|
|
5375
|
+
raw: result,
|
|
5376
|
+
ids: []
|
|
5377
|
+
});
|
|
5378
|
+
});
|
|
5379
|
+
var setAutoscaleCommand = new import_commander40.Command("set-autoscale").description("NKS \uB178\uB4DC \uADF8\uB8F9 autoscale \uC124\uC815\uC744 \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5380
|
+
const opts = cmd.optsWithGlobals();
|
|
5381
|
+
const payload = await readJsonFile(opts.file);
|
|
5382
|
+
const { client } = await resolveNksClient(opts);
|
|
5383
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 autoscale \uBCC0\uACBD \uC694\uCCAD \uC911...");
|
|
5384
|
+
let result;
|
|
5385
|
+
try {
|
|
5386
|
+
result = await client.setNodeGroupAutoscale(cluster, nodegroup, payload);
|
|
5387
|
+
} catch (err) {
|
|
5388
|
+
stopSpinner(false);
|
|
5389
|
+
throw err;
|
|
5390
|
+
}
|
|
5391
|
+
stopSpinner(true);
|
|
5392
|
+
uuidOutput2(opts, result, "autoscale \uBCC0\uACBD");
|
|
5393
|
+
});
|
|
5394
|
+
var setMetricAutoscaleCommand = new import_commander40.Command("set-metric-autoscale").description("NKS \uB178\uB4DC \uADF8\uB8F9 metric autoscale \uC124\uC815\uC744 \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5395
|
+
const opts = cmd.optsWithGlobals();
|
|
5396
|
+
const payload = await readJsonFile(opts.file);
|
|
5397
|
+
const { client } = await resolveNksClient(opts);
|
|
5398
|
+
startSpinner("NKS metric autoscale \uBCC0\uACBD \uC694\uCCAD \uC911...");
|
|
5399
|
+
let result;
|
|
5400
|
+
try {
|
|
5401
|
+
result = await client.setNodeGroupMetricAutoscale(cluster, nodegroup, payload);
|
|
5402
|
+
} catch (err) {
|
|
5403
|
+
stopSpinner(false);
|
|
5404
|
+
throw err;
|
|
5405
|
+
}
|
|
5406
|
+
stopSpinner(true);
|
|
5407
|
+
uuidOutput2(opts, result, "metric autoscale \uBCC0\uACBD");
|
|
5408
|
+
});
|
|
5409
|
+
var upgradeCommand = new import_commander40.Command("upgrade").description("NKS \uB178\uB4DC \uADF8\uB8F9 Kubernetes version \uC744 \uC5C5\uADF8\uB808\uC774\uB4DC\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--version <v>", "\uB300\uC0C1 Kubernetes version").option("--num-buffer-nodes <n>", "buffer node \uC218").option("--num-max-unavailable-nodes <n>", "\uCD5C\uB300 unavailable node \uC218").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5410
|
+
const opts = cmd.optsWithGlobals();
|
|
5411
|
+
const { client } = await resolveNksClient(opts);
|
|
5412
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 upgrade \uC694\uCCAD \uC911...");
|
|
5413
|
+
let result;
|
|
5414
|
+
try {
|
|
5415
|
+
result = await client.upgradeNodeGroup(cluster, nodegroup, {
|
|
5416
|
+
version: opts.version,
|
|
5417
|
+
numBufferNodes: optionalNonNegativeInteger(opts.numBufferNodes, "--num-buffer-nodes"),
|
|
5418
|
+
numMaxUnavailableNodes: optionalPositiveInteger(opts.numMaxUnavailableNodes, "--num-max-unavailable-nodes")
|
|
5419
|
+
});
|
|
5420
|
+
} catch (err) {
|
|
5421
|
+
stopSpinner(false);
|
|
5422
|
+
throw err;
|
|
5423
|
+
}
|
|
5424
|
+
stopSpinner(true);
|
|
5425
|
+
uuidOutput2(opts, result, "\uB178\uB4DC \uADF8\uB8F9 upgrade");
|
|
5426
|
+
});
|
|
5427
|
+
var setUserscriptCommand = new import_commander40.Command("set-userscript").description("NKS \uB178\uB4DC \uADF8\uB8F9 user script \uB97C \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <script>", "script \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5428
|
+
const opts = cmd.optsWithGlobals();
|
|
5429
|
+
const contents = await readTextFile(opts.file);
|
|
5430
|
+
const { client } = await resolveNksClient(opts);
|
|
5431
|
+
startSpinner("NKS node user script \uBCC0\uACBD \uC694\uCCAD \uC911...");
|
|
5432
|
+
let result;
|
|
5433
|
+
try {
|
|
5434
|
+
result = await client.setNodeGroupUserscript(cluster, nodegroup, contents);
|
|
5435
|
+
} catch (err) {
|
|
5436
|
+
stopSpinner(false);
|
|
5437
|
+
throw err;
|
|
5438
|
+
}
|
|
5439
|
+
stopSpinner(true);
|
|
5440
|
+
uuidOutput2(opts, result, "user script \uBCC0\uACBD");
|
|
5441
|
+
});
|
|
5442
|
+
var updateFlavorCommand = new import_commander40.Command("update-flavor").description("NKS \uB178\uB4DC \uADF8\uB8F9 flavor \uB97C \uBCC0\uACBD\uD55C\uB2E4").argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--flavor <uuid>", "\uBCC0\uACBD\uD560 flavor UUID").option("--num-buffer-nodes <n>", "buffer node \uC218").option("--num-max-unavailable-nodes <n>", "\uCD5C\uB300 unavailable node \uC218").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5443
|
+
const opts = cmd.optsWithGlobals();
|
|
5444
|
+
const { client } = await resolveNksClient(opts);
|
|
5445
|
+
startSpinner("NKS \uB178\uB4DC \uADF8\uB8F9 flavor \uBCC0\uACBD \uC694\uCCAD \uC911...");
|
|
5446
|
+
let result;
|
|
5447
|
+
try {
|
|
5448
|
+
result = await client.updateNodeGroupFlavor(cluster, nodegroup, {
|
|
5449
|
+
flavorId: opts.flavor,
|
|
5450
|
+
numBufferNodes: optionalNonNegativeInteger(opts.numBufferNodes, "--num-buffer-nodes"),
|
|
5451
|
+
numMaxUnavailableNodes: optionalPositiveInteger(opts.numMaxUnavailableNodes, "--num-max-unavailable-nodes")
|
|
5452
|
+
});
|
|
5453
|
+
} catch (err) {
|
|
5454
|
+
stopSpinner(false);
|
|
5455
|
+
throw err;
|
|
5456
|
+
}
|
|
5457
|
+
stopSpinner(true);
|
|
5458
|
+
uuidOutput2(opts, result, "flavor \uBCC0\uACBD");
|
|
5459
|
+
});
|
|
5460
|
+
function patchPayloadCommand(name) {
|
|
5461
|
+
return new import_commander40.Command(name).description(`NKS \uB178\uB4DC \uADF8\uB8F9 ${name === "set-fip-auto-bind" ? "Floating IP \uC790\uB3D9 \uC5F0\uACB0" : "Kubernetes labels"} \uC124\uC815\uC744 \uBCC0\uACBD\uD55C\uB2E4`).argument("<cluster>", "\uD074\uB7EC\uC2A4\uD130 UUID \uB610\uB294 \uC774\uB984").argument("<nodegroup>", "\uB178\uB4DC \uADF8\uB8F9 UUID \uB610\uB294 \uC774\uB984").requiredOption("--file <json>", "\uACF5\uC2DD API payload JSON \uD30C\uC77C").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (cluster, nodegroup, _opts, cmd) => {
|
|
5462
|
+
const opts = cmd.optsWithGlobals();
|
|
5463
|
+
const payload = await readJsonFile(opts.file);
|
|
5464
|
+
const { client } = await resolveNksClient(opts);
|
|
5465
|
+
startSpinner(`NKS \uB178\uB4DC \uADF8\uB8F9 ${name} \uC694\uCCAD \uC911...`);
|
|
5466
|
+
let result;
|
|
5467
|
+
try {
|
|
5468
|
+
result = name === "set-fip-auto-bind" ? await client.setNodeGroupFipAutoBind(cluster, nodegroup, payload) : await client.setNodeGroupLabels(cluster, nodegroup, payload);
|
|
5469
|
+
} catch (err) {
|
|
5470
|
+
stopSpinner(false);
|
|
5471
|
+
throw err;
|
|
5472
|
+
}
|
|
5473
|
+
stopSpinner(true);
|
|
5474
|
+
uuidOutput2(opts, result, name);
|
|
5475
|
+
});
|
|
5476
|
+
}
|
|
5477
|
+
var nodegroupCommand = new import_commander40.Command("nodegroup").description("NKS \uB178\uB4DC \uADF8\uB8F9 \uAD00\uB828 \uBA85\uB839").addCommand(listCommand7).addCommand(getCommand5).addCommand(createCommand5).addCommand(deleteCommand4).addCommand(nodeActionCommand("stop-node")).addCommand(nodeActionCommand("start-node")).addCommand(autoscaleCommand).addCommand(setAutoscaleCommand).addCommand(setMetricAutoscaleCommand).addCommand(upgradeCommand).addCommand(setUserscriptCommand).addCommand(updateFlavorCommand).addCommand(patchPayloadCommand("set-fip-auto-bind")).addCommand(patchPayloadCommand("set-labels"));
|
|
5478
|
+
|
|
5479
|
+
// src/commands/nks/addon.ts
|
|
5480
|
+
var import_commander41 = require("commander");
|
|
5481
|
+
function addonTypeRow(addonType) {
|
|
5482
|
+
return [
|
|
5483
|
+
addonType.uuid ?? addonType.id ?? addonType.name,
|
|
5484
|
+
addonType.name,
|
|
5485
|
+
String(addonType["version"] ?? "")
|
|
5486
|
+
];
|
|
5487
|
+
}
|
|
5488
|
+
function addonRow2(addon) {
|
|
5489
|
+
return [
|
|
5490
|
+
addon.uuid ?? addon.id ?? addon.name,
|
|
5491
|
+
addon.name,
|
|
5492
|
+
addon.version ?? "",
|
|
5493
|
+
addon.status ?? ""
|
|
5494
|
+
];
|
|
5495
|
+
}
|
|
5496
|
+
var addonTypeListCommand = new import_commander41.Command("list").description("NKS \uC560\uB4DC\uC628 \uD0C0\uC785 \uBAA9\uB85D\uC744 \uC870\uD68C\uD55C\uB2E4").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (_opts, cmd) => {
|
|
5497
|
+
const opts = cmd.optsWithGlobals();
|
|
5498
|
+
const { client } = await resolveNksClient(opts);
|
|
5499
|
+
startSpinner("NKS \uC560\uB4DC\uC628 \uD0C0\uC785 \uBAA9\uB85D \uC870\uD68C \uC911...");
|
|
5500
|
+
let addonTypes;
|
|
5501
|
+
try {
|
|
5502
|
+
addonTypes = await client.listAddonTypes();
|
|
5503
|
+
} catch (err) {
|
|
5504
|
+
stopSpinner(false);
|
|
5505
|
+
throw err;
|
|
5506
|
+
}
|
|
5507
|
+
stopSpinner(true);
|
|
5508
|
+
output(opts, {
|
|
5509
|
+
headers: ["id", "name", "version"],
|
|
5510
|
+
rows: addonTypes.map(addonTypeRow),
|
|
5511
|
+
raw: addonTypes,
|
|
5512
|
+
ids: addonTypes.map((addonType) => addonType.uuid ?? addonType.id ?? addonType.name)
|
|
5513
|
+
});
|
|
5514
|
+
});
|
|
5515
|
+
var addonTypeGetCommand = new import_commander41.Command("get").description("NKS \uC560\uB4DC\uC628 \uD0C0\uC785\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<addon-type>", "\uC560\uB4DC\uC628 \uD0C0\uC785 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (addonType, _opts, cmd) => {
|
|
5516
|
+
const opts = cmd.optsWithGlobals();
|
|
5517
|
+
const { client } = await resolveNksClient(opts);
|
|
5518
|
+
startSpinner("NKS \uC560\uB4DC\uC628 \uD0C0\uC785 \uC870\uD68C \uC911...");
|
|
5519
|
+
let result;
|
|
5520
|
+
try {
|
|
5521
|
+
result = await client.getAddonType(addonType);
|
|
5522
|
+
} catch (err) {
|
|
5523
|
+
stopSpinner(false);
|
|
5524
|
+
throw err;
|
|
5525
|
+
}
|
|
5526
|
+
stopSpinner(true);
|
|
5527
|
+
output(opts, {
|
|
5528
|
+
headers: ["id", "name", "version"],
|
|
5529
|
+
rows: [addonTypeRow(result)],
|
|
5530
|
+
raw: result,
|
|
5531
|
+
ids: [result.uuid ?? result.id ?? result.name]
|
|
5532
|
+
});
|
|
5533
|
+
});
|
|
5534
|
+
var addonTypeCommand = new import_commander41.Command("addon-type").description("NKS \uC560\uB4DC\uC628 \uD0C0\uC785 \uAD00\uB828 \uBA85\uB839").addCommand(addonTypeListCommand).addCommand(addonTypeGetCommand);
|
|
5535
|
+
var addonListCommand = new import_commander41.Command("list").description("NKS \uC560\uB4DC\uC628 \uBAA9\uB85D\uC744 \uC870\uD68C\uD55C\uB2E4").option("--k8s-version <version>", "Kubernetes version filter").option("--image <image>", "image filter").option("--platform-version <version>", "platform version filter").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (_opts, cmd) => {
|
|
5536
|
+
const opts = cmd.optsWithGlobals();
|
|
5537
|
+
const { client } = await resolveNksClient(opts);
|
|
5538
|
+
startSpinner("NKS \uC560\uB4DC\uC628 \uBAA9\uB85D \uC870\uD68C \uC911...");
|
|
5539
|
+
let addons;
|
|
5540
|
+
try {
|
|
5541
|
+
addons = await client.listAddons({
|
|
5542
|
+
k8sVersion: opts.k8sVersion,
|
|
5543
|
+
image: opts.image,
|
|
5544
|
+
platformVersion: opts.platformVersion
|
|
5545
|
+
});
|
|
5546
|
+
} catch (err) {
|
|
5547
|
+
stopSpinner(false);
|
|
5548
|
+
throw err;
|
|
5549
|
+
}
|
|
5550
|
+
stopSpinner(true);
|
|
5551
|
+
output(opts, {
|
|
5552
|
+
headers: ["id", "name", "version", "status"],
|
|
5553
|
+
rows: addons.map(addonRow2),
|
|
5554
|
+
raw: addons,
|
|
5555
|
+
ids: addons.map((addon) => addon.uuid ?? addon.id ?? addon.name)
|
|
5556
|
+
});
|
|
5557
|
+
});
|
|
5558
|
+
var addonGetCommand = new import_commander41.Command("get").description("NKS \uC560\uB4DC\uC628\uC744 \uC870\uD68C\uD55C\uB2E4").argument("<addon>", "\uC560\uB4DC\uC628 UUID \uB610\uB294 \uC774\uB984").option("--region <region>", "region override (\uAE30\uBCF8: iaas \uC790\uACA9\uC99D\uBA85\uC758 region)").option("--profile <name>", "\uC0AC\uC6A9\uD560 profile \uC774\uB984").action(async (addon, _opts, cmd) => {
|
|
5559
|
+
const opts = cmd.optsWithGlobals();
|
|
5560
|
+
const { client } = await resolveNksClient(opts);
|
|
5561
|
+
startSpinner("NKS \uC560\uB4DC\uC628 \uC870\uD68C \uC911...");
|
|
5562
|
+
let result;
|
|
5563
|
+
try {
|
|
5564
|
+
result = await client.getAddon(addon);
|
|
5565
|
+
} catch (err) {
|
|
5566
|
+
stopSpinner(false);
|
|
5567
|
+
throw err;
|
|
5568
|
+
}
|
|
5569
|
+
stopSpinner(true);
|
|
5570
|
+
output(opts, {
|
|
5571
|
+
headers: ["id", "name", "version", "status"],
|
|
5572
|
+
rows: [addonRow2(result)],
|
|
5573
|
+
raw: result,
|
|
5574
|
+
ids: [result.uuid ?? result.id ?? result.name]
|
|
5575
|
+
});
|
|
5576
|
+
});
|
|
5577
|
+
var addonCommand = new import_commander41.Command("addon").description("NKS \uC560\uB4DC\uC628 \uAD00\uB828 \uBA85\uB839").addCommand(addonListCommand).addCommand(addonGetCommand);
|
|
5578
|
+
|
|
4208
5579
|
// src/index.ts
|
|
4209
|
-
var program = new
|
|
4210
|
-
program.name("nhncloud").description("NHN Cloud CLI \u2014 AI agent & terminal friendly").version("0.
|
|
5580
|
+
var program = new import_commander42.Command();
|
|
5581
|
+
program.name("nhncloud").description("NHN Cloud CLI \u2014 AI agent & terminal friendly").version("0.6.0").option("--json", "JSON \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825").option("--quiet", "\uCD5C\uC18C \uCD9C\uB825 (\uC790\uB3D9\uD654\uC6A9)").option("--no-color", "\uC0C9\uC0C1 \uBE44\uD65C\uC131\uD654");
|
|
4211
5582
|
program.hook("preAction", () => {
|
|
4212
5583
|
const opts = program.opts();
|
|
4213
5584
|
if (!opts.color || process.env["NO_COLOR"]) {
|
|
4214
|
-
|
|
5585
|
+
import_chalk14.default.level = 0;
|
|
4215
5586
|
}
|
|
4216
5587
|
if (opts.json || opts.quiet) {
|
|
4217
5588
|
setQuiet(true);
|
|
4218
5589
|
}
|
|
4219
5590
|
});
|
|
4220
5591
|
program.addCommand(configureCommand);
|
|
4221
|
-
var logncrashCommand = new
|
|
5592
|
+
var logncrashCommand = new import_commander42.Command("logncrash").description("Log & Crash \uAD00\uB828 \uBA85\uB839");
|
|
4222
5593
|
logncrashCommand.addCommand(searchCommand);
|
|
4223
5594
|
logncrashCommand.addCommand(sendCommand);
|
|
4224
5595
|
logncrashCommand.addCommand(exportCommand);
|
|
4225
5596
|
program.addCommand(logncrashCommand);
|
|
4226
|
-
var deployCommand = new
|
|
5597
|
+
var deployCommand = new import_commander42.Command("deploy").description("NHN Cloud Deploy \uAD00\uB828 \uBA85\uB839");
|
|
4227
5598
|
deployCommand.addCommand(runCommand);
|
|
4228
5599
|
deployCommand.addCommand(artifactsCommand);
|
|
4229
5600
|
deployCommand.addCommand(serverGroupsCommand);
|
|
@@ -4233,7 +5604,7 @@ deployCommand.addCommand(binariesCommand);
|
|
|
4233
5604
|
deployCommand.addCommand(uploadCommand);
|
|
4234
5605
|
deployCommand.addCommand(downloadCommand);
|
|
4235
5606
|
program.addCommand(deployCommand);
|
|
4236
|
-
var instanceCommand = new
|
|
5607
|
+
var instanceCommand = new import_commander42.Command("instance").description("Compute \uC778\uC2A4\uD134\uC2A4 \uAD00\uB828 \uBA85\uB839");
|
|
4237
5608
|
instanceCommand.addCommand(listCommand);
|
|
4238
5609
|
instanceCommand.addCommand(flavorsCommand);
|
|
4239
5610
|
instanceCommand.addCommand(availabilityZonesCommand);
|
|
@@ -4252,31 +5623,38 @@ instanceCommand.addCommand(keypairCommand);
|
|
|
4252
5623
|
instanceCommand.addCommand(volumeCommand);
|
|
4253
5624
|
instanceCommand.addCommand(volumesCommand);
|
|
4254
5625
|
program.addCommand(instanceCommand);
|
|
4255
|
-
var networkCommand = new
|
|
5626
|
+
var networkCommand = new import_commander42.Command("network").description("VPC\xB7\uC11C\uBE0C\uB137 \uC870\uD68C");
|
|
4256
5627
|
networkCommand.addCommand(listCommand3);
|
|
4257
5628
|
networkCommand.addCommand(subnetCommand);
|
|
4258
5629
|
program.addCommand(networkCommand);
|
|
4259
|
-
var volumeCommand2 = new
|
|
5630
|
+
var volumeCommand2 = new import_commander42.Command("volume").description("Block Storage \uBCFC\uB968 \uAD00\uB828 \uBA85\uB839");
|
|
4260
5631
|
volumeCommand2.addCommand(listCommand2);
|
|
4261
5632
|
volumeCommand2.addCommand(getCommand);
|
|
4262
5633
|
volumeCommand2.addCommand(createCommand);
|
|
4263
5634
|
program.addCommand(volumeCommand2);
|
|
4264
|
-
var floatingipCommand = new
|
|
5635
|
+
var floatingipCommand = new import_commander42.Command("floatingip").description(
|
|
4265
5636
|
"Floating IP(\uC778\uC2A4\uD134\uC2A4 \uACF5\uC778 IP) \uAD00\uB9AC"
|
|
4266
5637
|
);
|
|
4267
5638
|
floatingipCommand.addCommand(listCommand4);
|
|
4268
5639
|
floatingipCommand.addCommand(createCommand2);
|
|
4269
5640
|
floatingipCommand.addCommand(deleteCommand);
|
|
4270
5641
|
program.addCommand(floatingipCommand);
|
|
4271
|
-
var ncrCommand = new
|
|
5642
|
+
var ncrCommand = new import_commander42.Command("ncr").description("NHN Container Registry \uAD00\uB828 \uBA85\uB839");
|
|
4272
5643
|
ncrCommand.addCommand(listCommand5);
|
|
4273
5644
|
ncrCommand.addCommand(getCommand3);
|
|
4274
5645
|
ncrCommand.addCommand(imagesCommand2);
|
|
4275
5646
|
ncrCommand.addCommand(tagsCommand);
|
|
4276
5647
|
program.addCommand(ncrCommand);
|
|
5648
|
+
var nksCommand = new import_commander42.Command("nks").description("NHN Kubernetes Service \uAD00\uB828 \uBA85\uB839");
|
|
5649
|
+
nksCommand.addCommand(supportsCommand);
|
|
5650
|
+
nksCommand.addCommand(clusterCommand);
|
|
5651
|
+
nksCommand.addCommand(nodegroupCommand);
|
|
5652
|
+
nksCommand.addCommand(addonTypeCommand);
|
|
5653
|
+
nksCommand.addCommand(addonCommand);
|
|
5654
|
+
program.addCommand(nksCommand);
|
|
4277
5655
|
program.parseAsync().catch((err) => {
|
|
4278
5656
|
const message = err instanceof Error ? err.message : String(err);
|
|
4279
5657
|
const exitCode = err instanceof NhnCloudCliError ? err.exitCode : 1;
|
|
4280
|
-
process.stderr.write(
|
|
5658
|
+
process.stderr.write(import_chalk14.default.red(`\uC624\uB958: ${message}`) + "\n");
|
|
4281
5659
|
process.exit(exitCode);
|
|
4282
5660
|
});
|