@catladder/cli 1.16.1 → 1.17.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 +2 -1
- package/dist/apps/cli/commands/general/index.js +17 -9
- package/dist/apps/cli/commands/general/index.js.map +1 -1
- package/dist/apps/cli/commands/general/portForward.js +5 -6
- package/dist/apps/cli/commands/general/portForward.js.map +1 -1
- package/dist/apps/cli/commands/project/commandDeletePods.js +4 -3
- package/dist/apps/cli/commands/project/commandDeletePods.js.map +1 -1
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js +2 -2
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js.map +1 -1
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js +23 -14
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -1
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js +6 -8
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js.map +1 -1
- package/dist/config/getProjectConfig.js +8 -9
- package/dist/config/getProjectConfig.js.map +1 -1
- package/dist/k8sApi/index.d.ts +7 -5
- package/dist/k8sApi/index.js +23 -9
- package/dist/k8sApi/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/cluster.js +0 -2
- package/dist/utils/cluster.js.map +1 -1
- package/dist/utils/gitlab.js +3 -0
- package/dist/utils/gitlab.js.map +1 -1
- package/dist/utils/projects/index.js +7 -8
- package/dist/utils/projects/index.js.map +1 -1
- package/package.json +2 -2
- package/src/apps/cli/commands/general/index.ts +6 -7
- package/src/apps/cli/commands/general/portForward.ts +2 -1
- package/src/apps/cli/commands/project/commandDeletePods.ts +2 -1
- package/src/apps/cli/commands/project/commandTriggerCronjob.ts +3 -3
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +7 -5
- package/src/apps/cli/commands/project/utils/ensureNamespace.ts +2 -1
- package/src/config/getProjectConfig.ts +10 -10
- package/src/k8sApi/index.ts +20 -8
- package/src/utils/cluster.ts +0 -2
- package/src/utils/gitlab.ts +3 -0
- package/src/utils/projects/index.ts +3 -1
- package/dist/utils/formatEnvVars.d.ts +0 -2
- package/dist/utils/formatEnvVars.js +0 -10
- package/dist/utils/formatEnvVars.js.map +0 -1
- package/src/utils/formatEnvVars.ts +0 -7
package/dist/utils/cluster.js
CHANGED
|
@@ -42,7 +42,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
42
42
|
exports.__esModule = true;
|
|
43
43
|
exports.connectToCluster = exports.getCurrentConnectedClusterName = exports.getCurrentContext = void 0;
|
|
44
44
|
var zx_1 = require("zx");
|
|
45
|
-
var k8sApi_1 = require("../k8sApi");
|
|
46
45
|
var getCurrentContext = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
47
46
|
switch (_a.label) {
|
|
48
47
|
case 0: return [4 /*yield*/, (0, zx_1.$)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["kubectl config current-context"], ["kubectl config current-context"])))];
|
|
@@ -65,7 +64,6 @@ var connectToCluster = function (fullname) { return __awaiter(void 0, void 0, vo
|
|
|
65
64
|
case 0: return [4 /*yield*/, (0, zx_1.$)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["kubectl config use-context ", ""], ["kubectl config use-context ", ""])), fullname)];
|
|
66
65
|
case 1:
|
|
67
66
|
_a.sent();
|
|
68
|
-
(0, k8sApi_1.reload)();
|
|
69
67
|
return [2 /*return*/];
|
|
70
68
|
}
|
|
71
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/utils/cluster.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/utils/cluster.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;AAEhB,IAAM,iBAAiB,GAAG;;gBAC9B,yBAAM,MAAC,oGAAA,gCAAgC,MAAA;gBAAxC,sBAAA,CAAC,SAAuC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAA;;SAAA,CAAC;AAD7C,QAAA,iBAAiB,qBAC4B;AAEnD,IAAM,8BAA8B,GAAG;;;oBACrC,qBAAM,IAAA,yBAAiB,GAAE,EAAA;oBAAhC,sBAAO,SAAyB,EAAC;;;KAClC,CAAC;AAFW,QAAA,8BAA8B,kCAEzC;AAEK,IAAM,gBAAgB,GAAG,UAAO,QAAgB;;;oBACrD,yBAAM,MAAC,qGAAA,6BAA8B,EAAQ,EAAE,KAAV,QAAQ,GAAE;;gBAA/C,SAA+C,CAAC;;;;KACjD,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
|
package/dist/utils/gitlab.js
CHANGED
|
@@ -145,6 +145,9 @@ var doGitlabRequest = function (vorpal, path, data, update) {
|
|
|
145
145
|
if (result.status >= 200 && result.status < 400) {
|
|
146
146
|
return [2 /*return*/, result.json()];
|
|
147
147
|
}
|
|
148
|
+
if (result.status === 404) {
|
|
149
|
+
throw new Error("not found");
|
|
150
|
+
}
|
|
148
151
|
_a = Error.bind;
|
|
149
152
|
_c = (_b = "Could not send request to gitlab api ".concat(path, ": ").concat(result.status, " \"").concat(result.statusText, "\".\nResponse: ")).concat;
|
|
150
153
|
_e = (_d = JSON).stringify;
|
package/dist/utils/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,15 +39,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
39
39
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
-
};
|
|
45
42
|
exports.__esModule = true;
|
|
46
43
|
exports.getProjectPodNames = exports.getProjectPvcs = exports.getProjectPods = exports.getProjectNamespace = exports.hasGitlabCiFile = exports.readRootGitlabCiFile = exports.getRootGitlabCiFile = exports.getGitRoot = void 0;
|
|
47
44
|
var zx_1 = require("zx");
|
|
48
45
|
var path_1 = require("path");
|
|
49
46
|
var getProjectConfig_1 = require("../../config/getProjectConfig");
|
|
50
|
-
var k8sApi_1 =
|
|
47
|
+
var k8sApi_1 = require("../../k8sApi");
|
|
51
48
|
var files_1 = require("../files");
|
|
52
49
|
var getGitRoot = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
53
50
|
return __generator(this, function (_a) {
|
|
@@ -109,13 +106,14 @@ var getProjectNamespace = function (envComponent) { return __awaiter(void 0, voi
|
|
|
109
106
|
}); };
|
|
110
107
|
exports.getProjectNamespace = getProjectNamespace;
|
|
111
108
|
var getProjectPods = function (envComponent) { return __awaiter(void 0, void 0, void 0, function () {
|
|
112
|
-
var namespace, res;
|
|
109
|
+
var namespace, k8sApi, res;
|
|
113
110
|
return __generator(this, function (_a) {
|
|
114
111
|
switch (_a.label) {
|
|
115
112
|
case 0: return [4 /*yield*/, (0, exports.getProjectNamespace)(envComponent)];
|
|
116
113
|
case 1:
|
|
117
114
|
namespace = _a.sent();
|
|
118
|
-
|
|
115
|
+
k8sApi = (0, k8sApi_1.getk8sApi)();
|
|
116
|
+
return [4 /*yield*/, k8sApi.listNamespacedPod(namespace)];
|
|
119
117
|
case 2:
|
|
120
118
|
res = _a.sent();
|
|
121
119
|
return [2 /*return*/, res.body.items];
|
|
@@ -124,13 +122,14 @@ var getProjectPods = function (envComponent) { return __awaiter(void 0, void 0,
|
|
|
124
122
|
}); };
|
|
125
123
|
exports.getProjectPods = getProjectPods;
|
|
126
124
|
var getProjectPvcs = function (envComponent) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
-
var namespace, res;
|
|
125
|
+
var namespace, k8sApi, res;
|
|
128
126
|
return __generator(this, function (_a) {
|
|
129
127
|
switch (_a.label) {
|
|
130
128
|
case 0: return [4 /*yield*/, (0, exports.getProjectNamespace)(envComponent)];
|
|
131
129
|
case 1:
|
|
132
130
|
namespace = _a.sent();
|
|
133
|
-
|
|
131
|
+
k8sApi = (0, k8sApi_1.getk8sApi)();
|
|
132
|
+
return [4 /*yield*/, k8sApi.listNamespacedPersistentVolumeClaim(namespace)];
|
|
134
133
|
case 2:
|
|
135
134
|
res = _a.sent();
|
|
136
135
|
return [2 /*return*/, res.body.items];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/projects/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/projects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;AACvB,6BAA4B;AAC5B,kEAA8E;AAC9E,uCAAyC;AACzC,kCAA2C;AAEpC,IAAM,UAAU,GAAG;;;oBAChB,yBAAM,MAAC,mGAAA,+BAA+B,MAAA;oBAA9C,sBAAO,CAAC,SAAsC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC;;;KAC/D,CAAC;AAFW,QAAA,UAAU,cAErB;AAEK,IAAM,mBAAmB,GAAG;;;;oBACjB,qBAAM,IAAA,kBAAU,GAAE,EAAA;;gBAA5B,OAAO,GAAG,SAAkB;gBAClC,sBAAO,IAAA,WAAI,EAAC,OAAO,EAAE,gBAAgB,CAAC,EAAC;;;KACxC,CAAC;AAHW,QAAA,mBAAmB,uBAG9B;AAEK,IAAM,oBAAoB,GAAG;;;YAClC,KAAA,uBAAe,CAAA;YAAC,qBAAM,IAAA,2BAAmB,GAAE,EAAA;gBAA3C,sBAAA,kBAAgB,SAA2B,EAAC,EAAA;;SAAA,CAAC;AADlC,QAAA,oBAAoB,wBACc;AAExC,IAAM,eAAe,GAAG;;;;oBACP,qBAAM,IAAA,4BAAoB,GAAE,EAAA;;gBAA5C,KAAgB,SAA4B,EAA3C,KAAK,QAAA,EAAE,IAAI,QAAA;gBAClB,IAAI,KAAK,EAAE;oBACT,sBAAO,KAAK,EAAC;iBACd;gBACD,sBAAO,IAAI,EAAC;;;KACb,CAAC;AANW,QAAA,eAAe,mBAM1B;AAEK,IAAM,mBAAmB,GAAG,UAAO,YAAoB;;;;;gBACpD,GAAG,GAAK,IAAA,8BAAW,EAAC,YAAY,CAAC,IAA9B,CAA+B;gBAC3B,qBAAM,IAAA,mCAAgB,GAAE,EAAA;;gBAAjC,MAAM,GAAG,SAAwB;gBACvC,sBAAO,UAAG,MAAM,CAAC,YAAY,cAAI,MAAM,CAAC,OAAO,cAAI,GAAG,CAAE,EAAC;;;KAC1D,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,IAAM,cAAc,GAAG,UAAO,YAAoB;;;;oBACrC,qBAAM,IAAA,2BAAmB,EAAC,YAAY,CAAC,EAAA;;gBAAnD,SAAS,GAAG,SAAuC;gBACnD,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;gBACf,qBAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAA;;gBAA/C,GAAG,GAAG,SAAyC;gBAErD,sBAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC;;;KACvB,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,IAAM,cAAc,GAAG,UAAO,YAAoB;;;;oBACrC,qBAAM,IAAA,2BAAmB,EAAC,YAAY,CAAC,EAAA;;gBAAnD,SAAS,GAAG,SAAuC;gBACnD,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;gBACf,qBAAM,MAAM,CAAC,mCAAmC,CAAC,SAAS,CAAC,EAAA;;gBAAjE,GAAG,GAAG,SAA2D;gBAEvE,sBAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC;;;KACvB,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,IAAM,kBAAkB,GAAG,UAAO,YAAoB;;;;oBAC9C,qBAAM,IAAA,sBAAc,EAAC,YAAY,CAAC,EAAA;;gBAAzC,IAAI,GAAG,SAAkC;gBAC/C,sBAAO,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAf,CAAe,CAAC,EAAC;;;KACzC,CAAC;AAHW,QAAA,kBAAkB,sBAG7B"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"catladder": "./bin/catladder"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@catladder/pipeline": "1.
|
|
19
|
+
"@catladder/pipeline": "1.17.0",
|
|
20
20
|
"@kubernetes/client-node": "^0.16.2",
|
|
21
21
|
"child-process-promise": "^2.2.1",
|
|
22
22
|
"command-exists-promise": "^2.0.2",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"eslint": "^8.7.0",
|
|
56
56
|
"typescript": "^4.5.4"
|
|
57
57
|
},
|
|
58
|
-
"version": "1.
|
|
58
|
+
"version": "1.17.0"
|
|
59
59
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import memoizee from "memoizee";
|
|
2
2
|
import Vorpal from "vorpal";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
getCurrentConnectedClusterName,
|
|
6
|
-
getCurrentContext,
|
|
7
|
-
} from "../../../../utils/cluster";
|
|
3
|
+
import { getk8sApi } from "../../../../k8sApi";
|
|
4
|
+
import { getCurrentContext } from "../../../../utils/cluster";
|
|
8
5
|
import { logError } from "../../../../utils/log";
|
|
9
6
|
import { syncBitwarden } from "../../../../utils/passwordstore";
|
|
10
7
|
import {
|
|
@@ -12,13 +9,12 @@ import {
|
|
|
12
9
|
stopPortForward,
|
|
13
10
|
} from "../../../../utils/portForward";
|
|
14
11
|
import { getShell } from "../../../../utils/shell";
|
|
15
|
-
import { getGoogleAuthUserNumber } from "../../utils/getGoogleAuthUserNumber";
|
|
16
|
-
import { openGoogleCloudLogs } from "../shared";
|
|
17
12
|
import { namespaceAutoCompletion } from "./namespaceAutoCompletion";
|
|
18
13
|
import portForward from "./portForward";
|
|
19
14
|
|
|
20
15
|
const getAllNamespaces = memoizee(
|
|
21
16
|
async () => {
|
|
17
|
+
const k8sApi = getk8sApi();
|
|
22
18
|
const res = await k8sApi.listNamespace();
|
|
23
19
|
return res.body.items;
|
|
24
20
|
},
|
|
@@ -45,6 +41,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
45
41
|
.command("list-secrets <namespace>", "show secrets")
|
|
46
42
|
.autocomplete(namespaceAutoCompletion)
|
|
47
43
|
.action(async function ({ namespace }) {
|
|
44
|
+
const k8sApi = getk8sApi();
|
|
48
45
|
const res = await k8sApi.listNamespacedSecret(namespace);
|
|
49
46
|
|
|
50
47
|
this.log(res.body.items.map((n) => n.metadata.name).join("\n"));
|
|
@@ -59,6 +56,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
59
56
|
.command("list-pods <namespace>", "list all pods of namespace")
|
|
60
57
|
.autocomplete(namespaceAutoCompletion)
|
|
61
58
|
.action(async function ({ namespace }) {
|
|
59
|
+
const k8sApi = getk8sApi();
|
|
62
60
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
63
61
|
this.log(res.body.items.map((n) => n.metadata.name).join("\n"));
|
|
64
62
|
});
|
|
@@ -74,6 +72,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
74
72
|
.command("get-shell <namespace>", "get a shell to a pod in the environment")
|
|
75
73
|
.autocomplete(namespaceAutoCompletion)
|
|
76
74
|
.action(async function ({ namespace }) {
|
|
75
|
+
const k8sApi = getk8sApi();
|
|
77
76
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
78
77
|
if (res.body.items.length === 0) {
|
|
79
78
|
logError(this, "sorry, no pods found");
|
|
@@ -3,7 +3,7 @@ import { logError } from "../../../../utils/log";
|
|
|
3
3
|
|
|
4
4
|
import { startPortForward } from "../../../../utils/portForward";
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import { getk8sApi } from "../../../../k8sApi";
|
|
7
7
|
import { namespaceAutoCompletion } from "./namespaceAutoCompletion";
|
|
8
8
|
|
|
9
9
|
export default async (vorpal: Vorpal) =>
|
|
@@ -11,6 +11,7 @@ export default async (vorpal: Vorpal) =>
|
|
|
11
11
|
.command("port-forward <namespace>", "start port-forwarding")
|
|
12
12
|
.autocomplete(namespaceAutoCompletion)
|
|
13
13
|
.action(async function ({ namespace }) {
|
|
14
|
+
const k8sApi = getk8sApi();
|
|
14
15
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
15
16
|
if (res.body.items.length === 0) {
|
|
16
17
|
logError(this, "sorry, no pods found");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Vorpal from "vorpal";
|
|
2
|
-
import
|
|
2
|
+
import { getk8sApi } from "../../../../k8sApi";
|
|
3
3
|
|
|
4
4
|
import { logError } from "../../../../utils/log";
|
|
5
5
|
import {
|
|
@@ -40,6 +40,7 @@ export default async (vorpal: Vorpal) =>
|
|
|
40
40
|
message: "Continue ? 🤔 ",
|
|
41
41
|
});
|
|
42
42
|
this.log("");
|
|
43
|
+
const k8sApi = getk8sApi();
|
|
43
44
|
if (shouldContinue) {
|
|
44
45
|
for (const podName of selectedPodNames) {
|
|
45
46
|
await k8sApi.deleteNamespacedPod(podName, namespace, "true");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { V1Job, V1ObjectMeta } from "@kubernetes/client-node";
|
|
2
2
|
|
|
3
3
|
import Vorpal from "vorpal";
|
|
4
|
-
import {
|
|
4
|
+
import { getk8sApiBatch, getk8sApiBatchBeta } from "../../../../k8sApi";
|
|
5
5
|
import { logError } from "../../../../utils/log";
|
|
6
6
|
import { namespaceAutoCompletion } from "../general/namespaceAutoCompletion";
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ import ensureCluster from "./utils/ensureCluster";
|
|
|
12
12
|
async function triggerCronjob(namespace: string) {
|
|
13
13
|
const {
|
|
14
14
|
body: { items: jobs },
|
|
15
|
-
} = await
|
|
15
|
+
} = await getk8sApiBatchBeta().listNamespacedCronJob(namespace);
|
|
16
16
|
|
|
17
17
|
const jobNames = jobs.map((j) => j.metadata.name);
|
|
18
18
|
|
|
@@ -34,7 +34,7 @@ async function triggerCronjob(namespace: string) {
|
|
|
34
34
|
job.metadata = metadata as V1ObjectMeta;
|
|
35
35
|
job.spec = jobSpec;
|
|
36
36
|
try {
|
|
37
|
-
const result = await
|
|
37
|
+
const result = await getk8sApiBatch().createNamespacedJob(namespace, job);
|
|
38
38
|
|
|
39
39
|
this.log("");
|
|
40
40
|
this.log(`yeah, you got a job, man. 😺 ${result.body.metadata.name}`);
|
|
@@ -6,12 +6,14 @@ export const setupAccessTokens = async (instance: CommandInstance) => {
|
|
|
6
6
|
const { id: projectId, web_url: projectWebUrl } = await getProjectInfo(
|
|
7
7
|
instance
|
|
8
8
|
);
|
|
9
|
-
|
|
10
|
-
instance,
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
try {
|
|
10
|
+
await doGitlabRequest(instance, `projects/${projectId}/variables/GL_TOKEN`);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
if (e.message !== "not found") {
|
|
13
|
+
throw e;
|
|
14
|
+
}
|
|
15
|
+
// not found
|
|
13
16
|
|
|
14
|
-
if (!variables.find((v: any) => v.key === "GL_TOKEN")) {
|
|
15
17
|
instance.log(
|
|
16
18
|
"I need add a GL_TOKEN to the project, so that semantic release will work\n"
|
|
17
19
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, getKubernetesNamespace } from "@catladder/pipeline";
|
|
2
2
|
import { V1Namespace, V1ObjectMeta } from "@kubernetes/client-node";
|
|
3
|
-
import
|
|
3
|
+
import { getk8sApi } from "../../../../../k8sApi";
|
|
4
4
|
|
|
5
5
|
export default async function (context: Context) {
|
|
6
6
|
const namespace = getKubernetesNamespace(
|
|
@@ -31,6 +31,7 @@ export default async function (context: Context) {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
namespaceBody.metadata = metadata;
|
|
34
|
+
const k8sApi = getk8sApi();
|
|
34
35
|
try {
|
|
35
36
|
await k8sApi.readNamespace(namespace);
|
|
36
37
|
|
|
@@ -109,16 +109,15 @@ const resolveSecrets = async (
|
|
|
109
109
|
|
|
110
110
|
return Object.fromEntries(
|
|
111
111
|
Object.entries(allEnvVars).map(([key, value]) => {
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
} else {
|
|
120
|
-
return [key, ""];
|
|
112
|
+
const containsSecret = String(value)?.includes?.("$CL_");
|
|
113
|
+
if (containsSecret) {
|
|
114
|
+
for (const variable of allVariablesInGitlab) {
|
|
115
|
+
value = value.replace(
|
|
116
|
+
new RegExp("\\$" + variable.key, "g"),
|
|
117
|
+
variable.value
|
|
118
|
+
);
|
|
121
119
|
}
|
|
120
|
+
return [key, value];
|
|
122
121
|
}
|
|
123
122
|
return [key, value];
|
|
124
123
|
})
|
|
@@ -131,6 +130,7 @@ export const getEnvVars = async (
|
|
|
131
130
|
componentName: string
|
|
132
131
|
) => {
|
|
133
132
|
const envionment = await getEnvironment(env, componentName);
|
|
134
|
-
|
|
133
|
+
// in the pipeline the secrets alreadyy exists and bash will expand them
|
|
134
|
+
// but here we need to manually load them
|
|
135
135
|
return resolveSecrets(vorpal, envionment.envVars);
|
|
136
136
|
};
|
package/src/k8sApi/index.ts
CHANGED
|
@@ -5,17 +5,29 @@ import {
|
|
|
5
5
|
BatchV1beta1Api,
|
|
6
6
|
} from "@kubernetes/client-node";
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
export const reload = () => {
|
|
8
|
+
const getKubeConfig = () => {
|
|
9
|
+
const kc = new KubeConfig();
|
|
11
10
|
kc.loadFromDefault();
|
|
11
|
+
return kc;
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* get kubernetes client. avoid reusing the instance when context get changed
|
|
15
|
+
* @returns kuberenetes client
|
|
16
|
+
*/
|
|
17
|
+
export const getk8sApi = () => {
|
|
18
|
+
const kc = getKubeConfig();
|
|
13
19
|
|
|
14
|
-
|
|
20
|
+
return kc.makeApiClient(CoreV1Api);
|
|
21
|
+
};
|
|
15
22
|
|
|
16
|
-
const
|
|
23
|
+
export const getk8sApiBatch = () => {
|
|
24
|
+
const kc = getKubeConfig();
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
return kc.makeApiClient(BatchV1Api);
|
|
27
|
+
};
|
|
20
28
|
|
|
21
|
-
export
|
|
29
|
+
export const getk8sApiBatchBeta = () => {
|
|
30
|
+
const kc = getKubeConfig();
|
|
31
|
+
|
|
32
|
+
return kc.makeApiClient(BatchV1beta1Api);
|
|
33
|
+
};
|
package/src/utils/cluster.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { $ } from "zx";
|
|
2
|
-
import { reload } from "../k8sApi";
|
|
3
2
|
|
|
4
3
|
export const getCurrentContext = async () =>
|
|
5
4
|
(await $`kubectl config current-context`).stdout.trim();
|
|
@@ -10,5 +9,4 @@ export const getCurrentConnectedClusterName = async () => {
|
|
|
10
9
|
|
|
11
10
|
export const connectToCluster = async (fullname: string) => {
|
|
12
11
|
await $`kubectl config use-context ${fullname}`;
|
|
13
|
-
reload();
|
|
14
12
|
};
|
package/src/utils/gitlab.ts
CHANGED
|
@@ -73,6 +73,9 @@ export const doGitlabRequest = async <T = any>(
|
|
|
73
73
|
if (result.status >= 200 && result.status < 400) {
|
|
74
74
|
return result.json();
|
|
75
75
|
}
|
|
76
|
+
if (result.status === 404) {
|
|
77
|
+
throw new Error("not found");
|
|
78
|
+
}
|
|
76
79
|
|
|
77
80
|
throw new Error(
|
|
78
81
|
`Could not send request to gitlab api ${path}: ${result.status} "${
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $ } from "zx";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { getProjectConfig, parseChoice } from "../../config/getProjectConfig";
|
|
4
|
-
import
|
|
4
|
+
import { getk8sApi } from "../../k8sApi";
|
|
5
5
|
import { readFileOrError } from "../files";
|
|
6
6
|
|
|
7
7
|
export const getGitRoot = async (): Promise<string> => {
|
|
@@ -32,6 +32,7 @@ export const getProjectNamespace = async (envComponent: string) => {
|
|
|
32
32
|
|
|
33
33
|
export const getProjectPods = async (envComponent: string) => {
|
|
34
34
|
const namespace = await getProjectNamespace(envComponent);
|
|
35
|
+
const k8sApi = getk8sApi();
|
|
35
36
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
36
37
|
|
|
37
38
|
return res.body.items;
|
|
@@ -39,6 +40,7 @@ export const getProjectPods = async (envComponent: string) => {
|
|
|
39
40
|
|
|
40
41
|
export const getProjectPvcs = async (envComponent: string) => {
|
|
41
42
|
const namespace = await getProjectNamespace(envComponent);
|
|
43
|
+
const k8sApi = getk8sApi();
|
|
42
44
|
const res = await k8sApi.listNamespacedPersistentVolumeClaim(namespace);
|
|
43
45
|
|
|
44
46
|
return res.body.items;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.__esModule = true;
|
|
3
|
-
var lodash_1 = require("lodash");
|
|
4
|
-
exports["default"] = (function (envVars) {
|
|
5
|
-
if (envVars === void 0) { envVars = {}; }
|
|
6
|
-
return (0, lodash_1.mapValues)(envVars, function (value) {
|
|
7
|
-
return (0, lodash_1.isObject)(value) ? JSON.stringify(value) : "".concat(value);
|
|
8
|
-
});
|
|
9
|
-
});
|
|
10
|
-
//# sourceMappingURL=formatEnvVars.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatEnvVars.js","sourceRoot":"","sources":["../../src/utils/formatEnvVars.ts"],"names":[],"mappings":";;AAAA,iCAA6C;AAE7C,sBAAe,UAAC,OAAY;IAAZ,wBAAA,EAAA,YAAY;IAC1B,OAAO,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAA,KAAK;QAC7B,OAAA,IAAA,iBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAG,KAAK,CAAE;IAApD,CAAoD,CACrD,CAAC;AACJ,CAAC,EAAC"}
|