@vaharoni/devops 1.1.12 → 1.2.1
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/dist/cli/core/affected.d.ts +9 -0
- package/dist/cli/core/affected.d.ts.map +1 -0
- package/dist/cli/{affected.js → core/affected.js} +4 -6
- package/dist/cli/core/cloudrun.d.ts +9 -0
- package/dist/cli/core/cloudrun.d.ts.map +1 -0
- package/dist/cli/{cloudrun.js → core/cloudrun.js} +3 -5
- package/dist/cli/core/console.d.ts +10 -0
- package/dist/cli/core/console.d.ts.map +1 -0
- package/dist/cli/core/console.js +50 -0
- package/dist/cli/core/constant.d.ts +9 -0
- package/dist/cli/core/constant.d.ts.map +1 -0
- package/dist/cli/{constant.js → core/constant.js} +3 -5
- package/dist/cli/core/env.d.ts +9 -0
- package/dist/cli/core/env.d.ts.map +1 -0
- package/dist/cli/{env.js → core/env.js} +4 -6
- package/dist/cli/core/exec.d.ts +9 -0
- package/dist/cli/core/exec.d.ts.map +1 -0
- package/dist/cli/{exec.js → core/exec.js} +5 -7
- package/dist/cli/core/image.d.ts +9 -0
- package/dist/cli/core/image.d.ts.map +1 -0
- package/dist/cli/{image.js → core/image.js} +6 -8
- package/dist/cli/core/index.d.ts +16 -0
- package/dist/cli/core/index.d.ts.map +1 -0
- package/dist/cli/core/index.js +15 -0
- package/dist/cli/core/init.d.ts +9 -0
- package/dist/cli/core/init.d.ts.map +1 -0
- package/dist/cli/{init.js → core/init.js} +3 -5
- package/dist/cli/core/job.d.ts +9 -0
- package/dist/cli/core/job.d.ts.map +1 -0
- package/dist/cli/{job.js → core/job.js} +7 -9
- package/dist/cli/core/namespace.d.ts +9 -0
- package/dist/cli/core/namespace.d.ts.map +1 -0
- package/dist/cli/{namespace.js → core/namespace.js} +4 -7
- package/dist/cli/core/prep-build.d.ts +10 -0
- package/dist/cli/core/prep-build.d.ts.map +1 -0
- package/dist/cli/{prep-build.js → core/prep-build.js} +6 -8
- package/dist/cli/core/registry.d.ts +9 -0
- package/dist/cli/core/registry.d.ts.map +1 -0
- package/dist/cli/{registry.js → core/registry.js} +5 -7
- package/dist/cli/core/run-many.d.ts +10 -0
- package/dist/cli/core/run-many.d.ts.map +1 -0
- package/dist/cli/{run-many.js → core/run-many.js} +3 -5
- package/dist/cli/core/run.d.ts +9 -0
- package/dist/cli/core/run.d.ts.map +1 -0
- package/dist/cli/{run.js → core/run.js} +6 -8
- package/dist/cli/core/test.d.ts +9 -0
- package/dist/cli/core/test.d.ts.map +1 -0
- package/dist/cli/{test.js → core/test.js} +2 -4
- package/dist/cli/exec.sh +21 -0
- package/dist/cli/extensions/dml.d.ts +9 -0
- package/dist/cli/extensions/dml.d.ts.map +1 -0
- package/dist/cli/{dml.js → extensions/dml.js} +2 -4
- package/dist/cli/extensions/index.d.ts +9 -0
- package/dist/cli/extensions/index.d.ts.map +1 -0
- package/dist/cli/extensions/index.js +8 -0
- package/dist/cli/extensions/internal-curl.d.ts +10 -0
- package/dist/cli/extensions/internal-curl.d.ts.map +1 -0
- package/dist/cli/{internal-curl.js → extensions/internal-curl.js} +3 -5
- package/dist/cli/extensions/jwt.d.ts +9 -0
- package/dist/cli/extensions/jwt.d.ts.map +1 -0
- package/dist/cli/{jwt.js → extensions/jwt.js} +3 -5
- package/dist/cli/extensions/prisma.d.ts +9 -0
- package/dist/cli/extensions/prisma.d.ts.map +1 -0
- package/dist/cli/{prisma.js → extensions/prisma.js} +4 -6
- package/dist/cli/extensions/redis-bitnami.d.ts +11 -0
- package/dist/cli/extensions/redis-bitnami.d.ts.map +1 -0
- package/dist/cli/{redis.js → extensions/redis-bitnami.js} +4 -6
- package/dist/cli/extensions/redis-ha.d.ts +11 -0
- package/dist/cli/extensions/redis-ha.d.ts.map +1 -0
- package/dist/cli/extensions/redis-ha.js +51 -0
- package/dist/cli/extensions/stackgres.d.ts +10 -0
- package/dist/cli/extensions/stackgres.d.ts.map +1 -0
- package/dist/cli/{db.js → extensions/stackgres.js} +3 -5
- package/dist/cli/extensions/template.d.ts +9 -0
- package/dist/cli/extensions/template.d.ts.map +1 -0
- package/dist/cli/{template.js → extensions/template.js} +8 -10
- package/dist/devops.js +84 -62
- package/dist/libs/k8s-generate.d.ts +1 -1
- package/dist/libs/k8s-generate.d.ts.map +1 -1
- package/dist/libs/k8s-generate.js +15 -14
- package/dist/libs/{k8s-redis.d.ts → k8s-redis-bitnami.d.ts} +1 -1
- package/dist/libs/k8s-redis-bitnami.d.ts.map +1 -0
- package/dist/libs/k8s-redis-ha.d.ts +3 -0
- package/dist/libs/k8s-redis-ha.d.ts.map +1 -0
- package/dist/libs/k8s-redis-ha.js +15 -0
- package/dist/plugins.d.ts +4 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +7 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/package.json +12 -2
- package/src/cli/{affected.ts → core/affected.ts} +4 -6
- package/src/cli/{cloudrun.ts → core/cloudrun.ts} +3 -5
- package/src/cli/core/console.ts +59 -0
- package/src/cli/{constant.ts → core/constant.ts} +3 -5
- package/src/cli/{env.ts → core/env.ts} +4 -6
- package/src/cli/{exec.ts → core/exec.ts} +5 -7
- package/src/cli/{image.ts → core/image.ts} +6 -8
- package/src/cli/core/index.ts +15 -0
- package/src/cli/{init.ts → core/init.ts} +4 -6
- package/src/cli/{job.ts → core/job.ts} +7 -9
- package/src/cli/{namespace.ts → core/namespace.ts} +4 -8
- package/src/cli/{prep-build.ts → core/prep-build.ts} +6 -8
- package/src/cli/{registry.ts → core/registry.ts} +5 -7
- package/src/cli/{run-many.ts → core/run-many.ts} +3 -5
- package/src/cli/{run.ts → core/run.ts} +6 -8
- package/src/cli/{test.ts → core/test.ts} +2 -4
- package/src/cli/{dml.ts → extensions/dml.ts} +2 -4
- package/src/cli/extensions/index.ts +8 -0
- package/src/cli/{internal-curl.ts → extensions/internal-curl.ts} +3 -5
- package/src/cli/{jwt.ts → extensions/jwt.ts} +3 -5
- package/src/cli/{prisma.ts → extensions/prisma.ts} +4 -6
- package/src/cli/{redis.ts → extensions/redis-bitnami.ts} +4 -6
- package/src/cli/extensions/redis-ha.ts +57 -0
- package/src/cli/{db.ts → extensions/stackgres.ts} +3 -5
- package/src/cli/{template.ts → extensions/template.ts} +8 -10
- package/src/devops.ts +100 -64
- package/src/libs/k8s-generate.ts +15 -14
- package/src/libs/k8s-redis-ha.ts +16 -0
- package/src/plugins.ts +8 -0
- package/src/target-templates/lang-variants-common/typescript/.devops/manifests/deployment-debug.yaml.hb +36 -39
- package/src/types/index.ts +1 -0
- package/dist/cli/affected.d.ts +0 -11
- package/dist/cli/affected.d.ts.map +0 -1
- package/dist/cli/cloudrun.d.ts +0 -11
- package/dist/cli/cloudrun.d.ts.map +0 -1
- package/dist/cli/console.d.ts +0 -11
- package/dist/cli/console.d.ts.map +0 -1
- package/dist/cli/console.js +0 -35
- package/dist/cli/constant.d.ts +0 -11
- package/dist/cli/constant.d.ts.map +0 -1
- package/dist/cli/db.d.ts +0 -11
- package/dist/cli/db.d.ts.map +0 -1
- package/dist/cli/dml.d.ts +0 -11
- package/dist/cli/dml.d.ts.map +0 -1
- package/dist/cli/env.d.ts +0 -11
- package/dist/cli/env.d.ts.map +0 -1
- package/dist/cli/exec.d.ts +0 -11
- package/dist/cli/exec.d.ts.map +0 -1
- package/dist/cli/image.d.ts +0 -11
- package/dist/cli/image.d.ts.map +0 -1
- package/dist/cli/init.d.ts +0 -11
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/internal-curl.d.ts +0 -11
- package/dist/cli/internal-curl.d.ts.map +0 -1
- package/dist/cli/job.d.ts +0 -11
- package/dist/cli/job.d.ts.map +0 -1
- package/dist/cli/jwt.d.ts +0 -11
- package/dist/cli/jwt.d.ts.map +0 -1
- package/dist/cli/namespace.d.ts +0 -11
- package/dist/cli/namespace.d.ts.map +0 -1
- package/dist/cli/prep-build.d.ts +0 -11
- package/dist/cli/prep-build.d.ts.map +0 -1
- package/dist/cli/prisma.d.ts +0 -11
- package/dist/cli/prisma.d.ts.map +0 -1
- package/dist/cli/redis.d.ts +0 -11
- package/dist/cli/redis.d.ts.map +0 -1
- package/dist/cli/registry.d.ts +0 -11
- package/dist/cli/registry.d.ts.map +0 -1
- package/dist/cli/run-many.d.ts +0 -11
- package/dist/cli/run-many.d.ts.map +0 -1
- package/dist/cli/run.d.ts +0 -11
- package/dist/cli/run.d.ts.map +0 -1
- package/dist/cli/template.d.ts +0 -11
- package/dist/cli/template.d.ts.map +0 -1
- package/dist/cli/test.d.ts +0 -11
- package/dist/cli/test.d.ts.map +0 -1
- package/dist/libs/k8s-redis.d.ts.map +0 -1
- package/src/cli/console.ts +0 -46
- /package/dist/libs/{k8s-redis.js → k8s-redis-bitnami.js} +0 -0
- /package/src/libs/{k8s-redis.ts → k8s-redis-bitnami.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dml.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/dml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAoGhE,iBAAS,GAAG,CAAC,MAAM,EAAE,gBAAgB,QAoBpC;AAED,eAAO,MAAM,GAAG;;;;CAAiC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
-
import { CLICommandParser, printUsageAndExit } from "
|
|
2
|
+
import { CLICommandParser, printUsageAndExit } from "../common";
|
|
3
3
|
const oneLiner = "Utilities to manage and run DML scripts in the db project";
|
|
4
4
|
const keyExamples = `
|
|
5
5
|
$ devops dml create --name my-dml-name
|
|
@@ -111,6 +111,4 @@ function run(cmdObj) {
|
|
|
111
111
|
printUsageAndExit(usage);
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
export
|
|
115
|
-
dml: { oneLiner, keyExamples, run },
|
|
116
|
-
};
|
|
114
|
+
export const dml = { oneLiner, keyExamples, run };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./dml";
|
|
2
|
+
export * from "./internal-curl";
|
|
3
|
+
export * from "./jwt";
|
|
4
|
+
export * from "./prisma";
|
|
5
|
+
export * from "./redis-bitnami";
|
|
6
|
+
export * from "./redis-ha";
|
|
7
|
+
export * from "./stackgres";
|
|
8
|
+
export * from "./template";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CLICommandParser } from "../common";
|
|
2
|
+
declare function run(cmdObj: CLICommandParser): Promise<void>;
|
|
3
|
+
export declare const internalCurl: {
|
|
4
|
+
command: string;
|
|
5
|
+
oneLiner: string;
|
|
6
|
+
keyExamples: string;
|
|
7
|
+
run: typeof run;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=internal-curl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-curl.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/internal-curl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAuBhE,iBAAe,GAAG,CAAC,MAAM,EAAE,gBAAgB,iBAmB1C;AAED,eAAO,MAAM,YAAY;;;;;CAA2D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InternalToken } from "
|
|
2
|
-
import { CLICommandParser, printUsageAndExit } from "
|
|
1
|
+
import { InternalToken } from "../../app-support/crypto";
|
|
2
|
+
import { CLICommandParser, printUsageAndExit } from "../common";
|
|
3
3
|
const oneLiner = "Runs a curl command bearing an internal jwt-like token to allow verifying internal communication within the namespace";
|
|
4
4
|
const keyExamples = `$ devops internal-curl jobs http://service-name:port/path`;
|
|
5
5
|
const usage = `
|
|
@@ -38,6 +38,4 @@ async function run(cmdObj) {
|
|
|
38
38
|
}
|
|
39
39
|
cmdObj.executorFromEnv(`curl -H "Authorization: Bearer ${token}" ${rest.join(" ")}`).exec();
|
|
40
40
|
}
|
|
41
|
-
export
|
|
42
|
-
'internal-curl': { oneLiner, keyExamples, run },
|
|
43
|
-
};
|
|
41
|
+
export const internalCurl = { command: 'internal-curl', oneLiner, keyExamples, run };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAqBhE,iBAAe,GAAG,CAAC,MAAM,EAAE,gBAAgB,iBAK1C;AAED,eAAO,MAAM,GAAG;;;;CAAiC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InternalToken } from "
|
|
2
|
-
import { CLICommandParser, printUsageAndExit } from "
|
|
1
|
+
import { InternalToken } from "../../app-support/crypto";
|
|
2
|
+
import { CLICommandParser, printUsageAndExit } from "../common";
|
|
3
3
|
const oneLiner = "Returns a JWT-like token to allow verifying internal communication within the namespace";
|
|
4
4
|
const keyExamples = `$ devops jwt jobs`;
|
|
5
5
|
const usage = `
|
|
@@ -22,6 +22,4 @@ async function run(cmdObj) {
|
|
|
22
22
|
const subject = cmdObj.args[0];
|
|
23
23
|
console.log(new InternalToken(subject).generate());
|
|
24
24
|
}
|
|
25
|
-
export
|
|
26
|
-
jwt: { oneLiner, keyExamples, run },
|
|
27
|
-
};
|
|
25
|
+
export const jwt = { oneLiner, keyExamples, run };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/prisma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAuB7C,iBAAe,GAAG,CAAC,MAAM,EAAE,gBAAgB,iBAK1C;AAED,eAAO,MAAM,MAAM;;;;CAAiC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { CLICommandParser
|
|
1
|
+
import { CLICommandParser } from "../common";
|
|
2
2
|
import url from "url";
|
|
3
3
|
import path from "path";
|
|
4
4
|
const __file__ = url.fileURLToPath(import.meta.url);
|
|
5
|
-
const
|
|
6
|
-
const execShPath = path.join(
|
|
5
|
+
const __cli__ = path.join(path.dirname(__file__), "../..", "cli");
|
|
6
|
+
const execShPath = path.join(__cli__, "exec.sh");
|
|
7
7
|
const oneLiner = "Runs prisma commands in the db project after injecting the environment variables";
|
|
8
8
|
const keyExamples = `$ devops prisma migrate dev`;
|
|
9
9
|
const usage = `
|
|
@@ -20,6 +20,4 @@ EXAMPLES
|
|
|
20
20
|
async function run(cmdObj) {
|
|
21
21
|
cmdObj.executorFromEnv(`${execShPath} db prisma ${cmdObj.args.join(" ")}`, { checkEnvYaml: false }).spawn();
|
|
22
22
|
}
|
|
23
|
-
export
|
|
24
|
-
prisma: { oneLiner, keyExamples, run },
|
|
25
|
-
};
|
|
23
|
+
export const prisma = { oneLiner, keyExamples, run };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CLICommandParser } from "../common";
|
|
2
|
+
declare function run(cmdObj: CLICommandParser): void;
|
|
3
|
+
export declare const redisBitnami: {
|
|
4
|
+
name: string;
|
|
5
|
+
command: string;
|
|
6
|
+
oneLiner: string;
|
|
7
|
+
keyExamples: string;
|
|
8
|
+
run: typeof run;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=redis-bitnami.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-bitnami.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/redis-bitnami.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAmC,MAAM,WAAW,CAAC;AA2D9E,iBAAS,GAAG,CAAC,MAAM,EAAE,gBAAgB,QAiBpC;AAED,eAAO,MAAM,YAAY;;;;;;CAA0E,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { establishRedisTunnel, getRedisList, getRedisPassword } from "
|
|
3
|
-
import { CLICommandParser, printUsageAndExit, StrongParams } from "
|
|
4
|
-
const oneLiner = "Utilities to help accessing production and staging redis";
|
|
2
|
+
import { establishRedisTunnel, getRedisList, getRedisPassword } from "../../libs/k8s-redis-bitnami";
|
|
3
|
+
import { CLICommandParser, printUsageAndExit, StrongParams } from "../common";
|
|
4
|
+
const oneLiner = "Utilities to help accessing production and staging redis installation from Bitnami";
|
|
5
5
|
const keyExamples = `
|
|
6
6
|
$ devops redis list
|
|
7
7
|
$ devops redis password redis-staging
|
|
@@ -71,6 +71,4 @@ function run(cmdObj) {
|
|
|
71
71
|
});
|
|
72
72
|
handler(params);
|
|
73
73
|
}
|
|
74
|
-
export
|
|
75
|
-
redis: { oneLiner, keyExamples, run },
|
|
76
|
-
};
|
|
74
|
+
export const redisBitnami = { name: 'redis-bitnami', command: 'redis', oneLiner, keyExamples, run };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CLICommandParser } from "../common";
|
|
2
|
+
declare function run(cmdObj: CLICommandParser): void;
|
|
3
|
+
export declare const redisHa: {
|
|
4
|
+
name: string;
|
|
5
|
+
command: string;
|
|
6
|
+
oneLiner: string;
|
|
7
|
+
keyExamples: string;
|
|
8
|
+
run: typeof run;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=redis-ha.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-ha.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/redis-ha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmC,MAAM,WAAW,CAAC;AAqC9E,iBAAS,GAAG,CAAC,MAAM,EAAE,gBAAgB,QAiBpC;AAED,eAAO,MAAM,OAAO;;;;;;CAAqE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { CLICommandParser, printUsageAndExit, StrongParams } from "../common";
|
|
2
|
+
import { establishRedisTunnel, getRedisList } from "../../libs/k8s-redis-ha";
|
|
3
|
+
const oneLiner = "Utilities to help accessing production and staging redis installation from redis-ha";
|
|
4
|
+
const keyExamples = `
|
|
5
|
+
$ devops redis list
|
|
6
|
+
$ devops redis tunnel redis-staging
|
|
7
|
+
`.trim();
|
|
8
|
+
const usage = `
|
|
9
|
+
${oneLiner}
|
|
10
|
+
|
|
11
|
+
COMMANDS
|
|
12
|
+
list Lists the available redis installations
|
|
13
|
+
tunnel <namespace> [-p <port>] Sets up a tunnel to the remote Redis instance so you can access the DB from your local machine on port 9379 by default
|
|
14
|
+
|
|
15
|
+
NOTES
|
|
16
|
+
This command assumes the namespace and the helm release name are the same.
|
|
17
|
+
The --env flag should not be used with these commands, as the Redis namespaces follow different conventions than the monorepo env.
|
|
18
|
+
|
|
19
|
+
EXAMPLES
|
|
20
|
+
${keyExamples}
|
|
21
|
+
`;
|
|
22
|
+
const handlers = {
|
|
23
|
+
list: () => {
|
|
24
|
+
const res = getRedisList();
|
|
25
|
+
console.log(res);
|
|
26
|
+
},
|
|
27
|
+
tunnel: (opts) => {
|
|
28
|
+
const namespace = opts.required("namespace");
|
|
29
|
+
const port = opts.optional("port") ?? '9379';
|
|
30
|
+
establishRedisTunnel(namespace, port);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
function run(cmdObj) {
|
|
34
|
+
if (cmdObj.help || cmdObj.args.length < 1)
|
|
35
|
+
printUsageAndExit(usage);
|
|
36
|
+
const parsed = cmdObj.parseOptions({ params: ["-p"] });
|
|
37
|
+
const [command, namespace] = parsed.args;
|
|
38
|
+
const port = parsed.options["-p"];
|
|
39
|
+
// @ts-expect-error left as an exercise for the reader
|
|
40
|
+
const handler = handlers[command];
|
|
41
|
+
if (!handler) {
|
|
42
|
+
console.error(`Unknown command: ${command}`);
|
|
43
|
+
printUsageAndExit(usage);
|
|
44
|
+
}
|
|
45
|
+
const params = new StrongParams(usage, {
|
|
46
|
+
namespace,
|
|
47
|
+
port,
|
|
48
|
+
});
|
|
49
|
+
handler(params);
|
|
50
|
+
}
|
|
51
|
+
export const redisHa = { name: 'redis-ha', command: 'redis', oneLiner, keyExamples, run };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CLICommandParser } from "../common";
|
|
2
|
+
declare function run(cmdObj: CLICommandParser): void;
|
|
3
|
+
export declare const stackgres: {
|
|
4
|
+
command: string;
|
|
5
|
+
oneLiner: string;
|
|
6
|
+
keyExamples: string;
|
|
7
|
+
run: typeof run;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=stackgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackgres.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/stackgres.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAmC,MAAM,WAAW,CAAC;AAsG9E,iBAAS,GAAG,CAAC,MAAM,EAAE,gBAAgB,QAiBpC;AAED,eAAO,MAAM,SAAS;;;;;CAAgD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { connectToPatroni, connectToPsql, establishTunnel, getDbAdminPassword, getDbBackups, getDbList, getDbPasswords, } from "
|
|
2
|
-
import { CLICommandParser, printUsageAndExit, StrongParams } from "
|
|
1
|
+
import { connectToPatroni, connectToPsql, establishTunnel, getDbAdminPassword, getDbBackups, getDbList, getDbPasswords, } from "../../libs/k8s-db";
|
|
2
|
+
import { CLICommandParser, printUsageAndExit, StrongParams } from "../common";
|
|
3
3
|
const oneLiner = "Utilities to help day to day operations of production and staging databases";
|
|
4
4
|
const keyExamples = `
|
|
5
5
|
$ devops db list
|
|
@@ -114,6 +114,4 @@ function run(cmdObj) {
|
|
|
114
114
|
});
|
|
115
115
|
handler(params);
|
|
116
116
|
}
|
|
117
|
-
export
|
|
118
|
-
db: { oneLiner, keyExamples, run },
|
|
119
|
-
};
|
|
117
|
+
export const stackgres = { command: 'db', oneLiner, keyExamples, run };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/cli/extensions/template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAmC,MAAM,WAAW,CAAC;AA4I9E,iBAAS,GAAG,CAAC,MAAM,EAAE,gBAAgB,QAsBpC;AAED,eAAO,MAAM,QAAQ;;;;CAAiC,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {} from "
|
|
2
|
-
import { CLICommandParser, printUsageAndExit, StrongParams } from "
|
|
3
|
-
import { generateDbMigrateJob,
|
|
1
|
+
import {} from "../../libs/k8s-image-config";
|
|
2
|
+
import { CLICommandParser, printUsageAndExit, StrongParams } from "../common";
|
|
3
|
+
import { generateDbMigrateJob, generateDebugPod, generateWorkspaceDeployment, ImageContextGenerator } from "../../libs/k8s-generate";
|
|
4
4
|
import chalk from "chalk";
|
|
5
|
-
import { getWorkspace } from "
|
|
6
|
-
import { getWorkspaceImages } from "
|
|
7
|
-
import { getImageData, getImageNames } from "
|
|
5
|
+
import { getWorkspace } from "../../libs/discovery";
|
|
6
|
+
import { getWorkspaceImages } from "../../libs/discovery/images";
|
|
7
|
+
import { getImageData, getImageNames } from "../../libs/config";
|
|
8
8
|
const SUPPORTED_CONTEXT_TYPES = ['deployment', 'db-migrate', 'debug'];
|
|
9
9
|
const oneLiner = "Utilities to help validate manifest templates rendering.";
|
|
10
10
|
const keyExamples = `
|
|
@@ -93,7 +93,7 @@ const handlers = {
|
|
|
93
93
|
'debug': (opts) => {
|
|
94
94
|
const image = opts.required('workspaceOrImage');
|
|
95
95
|
console.warn(chalk.green(`\nThis is a sample of generated manifests for the debug image ${image}:\n`));
|
|
96
|
-
console.log(
|
|
96
|
+
console.log(generateDebugPod(opts.required('env'), image, 'dummy-sha'));
|
|
97
97
|
},
|
|
98
98
|
},
|
|
99
99
|
};
|
|
@@ -118,6 +118,4 @@ function run(cmdObj) {
|
|
|
118
118
|
});
|
|
119
119
|
handler(params);
|
|
120
120
|
}
|
|
121
|
-
export
|
|
122
|
-
template: { oneLiner, keyExamples, run },
|
|
123
|
-
};
|
|
121
|
+
export const template = { oneLiner, keyExamples, run };
|
package/dist/devops.js
CHANGED
|
@@ -1,65 +1,73 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// This file behaves as a façade for various devops scripts
|
|
3
|
+
import { globSync } from "glob";
|
|
3
4
|
import { CLICommandParser, printUsageAndExit } from "./cli/common";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import registry from "./cli/registry";
|
|
10
|
-
import env from "./cli/env";
|
|
11
|
-
import exec from "./cli/exec";
|
|
12
|
-
import prepBuild from "./cli/prep-build";
|
|
13
|
-
import prisma from "./cli/prisma";
|
|
14
|
-
import run from "./cli/run";
|
|
15
|
-
import runMany from "./cli/run-many";
|
|
16
|
-
import test from "./cli/test";
|
|
17
|
-
import init from "./cli/init";
|
|
18
|
-
import redis from "./cli/redis";
|
|
19
|
-
import internalCurl from "./cli/internal-curl";
|
|
20
|
-
import jwt from "./cli/jwt";
|
|
21
|
-
import namespace from "./cli/namespace";
|
|
22
|
-
import image from "./cli/image";
|
|
23
|
-
import template from "./cli/template";
|
|
24
|
-
import job from "./cli/job";
|
|
25
|
-
import cloudrun from "./cli/cloudrun";
|
|
5
|
+
import * as coreImports from "./cli/core";
|
|
6
|
+
import * as extensionImports from "./cli/extensions";
|
|
7
|
+
import { getConst } from "./libs/config";
|
|
8
|
+
import { existsSync, readdirSync } from "fs";
|
|
9
|
+
import path from "path";
|
|
26
10
|
const [_node, _scriptPath, ...commandArgs] = process.argv;
|
|
27
|
-
|
|
28
|
-
// day-to-day
|
|
29
|
-
init,
|
|
30
|
-
run,
|
|
31
|
-
runMany,
|
|
32
|
-
exec,
|
|
33
|
-
env,
|
|
34
|
-
prisma,
|
|
35
|
-
dml,
|
|
36
|
-
db,
|
|
37
|
-
redis,
|
|
38
|
-
console,
|
|
39
|
-
test,
|
|
40
|
-
//= Infra
|
|
41
|
-
namespace,
|
|
42
|
-
image,
|
|
43
|
-
template,
|
|
44
|
-
job,
|
|
45
|
-
//= Deployment
|
|
46
|
-
prepBuild,
|
|
47
|
-
cloudrun,
|
|
48
|
-
affected,
|
|
49
|
-
constant,
|
|
50
|
-
registry,
|
|
51
|
-
internalCurl,
|
|
52
|
-
jwt,
|
|
53
|
-
];
|
|
54
|
-
const commands = {};
|
|
55
|
-
allImports.forEach((imported) => {
|
|
56
|
-
Object.entries(imported).forEach(([key, object]) => {
|
|
57
|
-
const { oneLiner, keyExamples, run } = object;
|
|
58
|
-
commands[key] = { oneLiner, keyExamples, run, key };
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
const keyLength = Math.max(...Object.keys(commands).map((x) => x.length)) + 10;
|
|
11
|
+
// Presentation
|
|
62
12
|
const newLine = "\n ";
|
|
13
|
+
function maxKeyLength(commands) {
|
|
14
|
+
return Math.max(...Object.keys(commands).map((x) => x.length)) + 10;
|
|
15
|
+
}
|
|
16
|
+
// Core commands
|
|
17
|
+
const coreCommands = {};
|
|
18
|
+
Object.entries(coreImports).forEach(([constKey, imported]) => {
|
|
19
|
+
const { oneLiner, keyExamples, run } = imported;
|
|
20
|
+
const key = 'command' in imported ? imported.command : constKey;
|
|
21
|
+
coreCommands[key] = { oneLiner, keyExamples, run, key };
|
|
22
|
+
});
|
|
23
|
+
const coreCommandsKeyLength = maxKeyLength(coreCommands);
|
|
24
|
+
// Extensions
|
|
25
|
+
const extensionCommands = {};
|
|
26
|
+
const activeExtensions = getConst('extensions', { ignoreIfInvalid: true });
|
|
27
|
+
if (activeExtensions?.length) {
|
|
28
|
+
const availableExtensionsLookup = Object.fromEntries(Object.entries(extensionImports).map(([constKey, value]) => {
|
|
29
|
+
const { oneLiner, keyExamples, run } = value;
|
|
30
|
+
const keyInYaml = 'name' in value ? value.name : constKey;
|
|
31
|
+
const key = 'command' in value ? value.command : constKey;
|
|
32
|
+
return [keyInYaml, { oneLiner, keyExamples, run, key }];
|
|
33
|
+
}));
|
|
34
|
+
for (const extension of activeExtensions) {
|
|
35
|
+
const extensionData = availableExtensionsLookup[extension];
|
|
36
|
+
if (!extensionData) {
|
|
37
|
+
console.error(`\nExtension "${extension}" referenced in constants.yaml is not supported\n\n`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
extensionCommands[extensionData.key] = extensionData;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const extensionCommandsKeyLength = maxKeyLength(extensionCommands);
|
|
44
|
+
// Plugins
|
|
45
|
+
const pluginCommands = {};
|
|
46
|
+
if (existsSync('.devops/plugins')) {
|
|
47
|
+
const pluginsDir = path.join(process.cwd(), '.devops/plugins');
|
|
48
|
+
const pluginFiles = globSync(path.join(pluginsDir, '*.ts'));
|
|
49
|
+
for (const pluginFile of pluginFiles) {
|
|
50
|
+
const plugin = await import(pluginFile);
|
|
51
|
+
const keys = Object.keys(plugin);
|
|
52
|
+
if (keys.length !== 1) {
|
|
53
|
+
console.error(`Plugin ${pluginFile} must export exactly one command`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const constKey = keys[0];
|
|
57
|
+
const { oneLiner, keyExamples, run, command } = plugin[constKey];
|
|
58
|
+
const key = command ?? constKey;
|
|
59
|
+
if (!oneLiner || !keyExamples || !run) {
|
|
60
|
+
console.error(`Plugin ${pluginFile} must export oneLiner, keyExamples, and run`);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
if (typeof run !== 'function') {
|
|
64
|
+
console.error(`Plugin ${pluginFile} must export a run function`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
pluginCommands[key] = { oneLiner, keyExamples, run, key };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const pluginCommandsKeyLength = maxKeyLength(pluginCommands);
|
|
63
71
|
const GENERAL_USAGE = `
|
|
64
72
|
Devops utilities for the monorepo.
|
|
65
73
|
|
|
@@ -83,11 +91,25 @@ CHOOSING ENV with <env-options>
|
|
|
83
91
|
To skip this check, use --skip-env-check.
|
|
84
92
|
|
|
85
93
|
|
|
86
|
-
COMMANDS
|
|
87
|
-
${Object.values(
|
|
88
|
-
.map((cmd) => [cmd.key, " ".repeat(
|
|
94
|
+
CORE COMMANDS
|
|
95
|
+
${Object.values(coreCommands)
|
|
96
|
+
.map((cmd) => [cmd.key, " ".repeat(coreCommandsKeyLength - cmd.key.length), cmd.oneLiner].join(""))
|
|
89
97
|
.join(newLine)}
|
|
90
98
|
`;
|
|
99
|
+
const EXTENSION_USAGE = Object.keys(extensionCommands).length ? `
|
|
100
|
+
ACTIVE EXTENSIONS
|
|
101
|
+
${Object.values(extensionCommands)
|
|
102
|
+
.map((cmd) => [cmd.key, " ".repeat(extensionCommandsKeyLength - cmd.key.length), cmd.oneLiner].join(""))
|
|
103
|
+
.join(newLine)}
|
|
104
|
+
` : '';
|
|
105
|
+
const PLUGIN_USAGE = Object.keys(pluginCommands).length ? `
|
|
106
|
+
ACTIVE PLUGINS
|
|
107
|
+
${Object.values(pluginCommands)
|
|
108
|
+
.map((cmd) => [cmd.key, " ".repeat(pluginCommandsKeyLength - cmd.key.length), cmd.oneLiner].join(""))
|
|
109
|
+
.join(newLine)}
|
|
110
|
+
` : '';
|
|
111
|
+
const ALL_USAGE = [GENERAL_USAGE, EXTENSION_USAGE, PLUGIN_USAGE].filter(Boolean).join("");
|
|
112
|
+
const allCommands = { ...coreCommands, ...extensionCommands, ...pluginCommands };
|
|
91
113
|
// EXAMPLES
|
|
92
114
|
// ${Object.values(commands)
|
|
93
115
|
// .map((cmd) =>
|
|
@@ -99,7 +121,7 @@ COMMANDS
|
|
|
99
121
|
// )
|
|
100
122
|
// .join(newLine)}
|
|
101
123
|
const commandObj = new CLICommandParser(commandArgs);
|
|
102
|
-
const chosenCommand =
|
|
124
|
+
const chosenCommand = allCommands[commandObj.command];
|
|
103
125
|
if (!chosenCommand)
|
|
104
|
-
printUsageAndExit(
|
|
126
|
+
printUsageAndExit(ALL_USAGE);
|
|
105
127
|
chosenCommand.run(commandObj);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PackageData, TemplateDbMigrateObject, TemplateDebugObject, TemplateDeploymentObject, TemplateSharedContext } from "../types";
|
|
2
2
|
export declare function generateImageDeployments(monorepoEnv: string, image: string, gitSha: string): string;
|
|
3
3
|
export declare function generateWorkspaceDeployment(packageData: PackageData, monorepoEnv: string, image: string, gitSha: string): string;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function generateDebugPod(monorepoEnv: string, image: string, gitSha: string): string | undefined;
|
|
5
5
|
export declare function generateDbMigrateJob(monorepoEnv: string, image: string, gitSha: string): string;
|
|
6
6
|
export declare class ImageContextGenerator {
|
|
7
7
|
monorepoEnv: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k8s-generate.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6B3I,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"k8s-generate.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6B3I,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,UAaf;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAOvH;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,sBASf;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,UAOf;AA+FD,qBAAa,qBAAqB;IAIb,WAAW,EAAE,MAAM;IAAS,KAAK,EAAE,MAAM;IAAS,MAAM,EAAE,MAAM;IAHnF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;gBAEvC,WAAW,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM;IAYnF,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,wBAAwB;IAmB7D,YAAY,IAAI,uBAAuB;IAOvC,QAAQ,IAAI,mBAAmB;CAMhC"}
|
|
@@ -30,8 +30,7 @@ export function generateImageDeployments(monorepoEnv, image, gitSha) {
|
|
|
30
30
|
const renderFn = (template) => Handlebars.compile(template)(context);
|
|
31
31
|
return generateManifestForDeployment(projectData.rootPath, projectData.deployment.template, renderFn);
|
|
32
32
|
});
|
|
33
|
-
const
|
|
34
|
-
const manifest = [debug, ...apps].filter(Boolean).join("\n---\n");
|
|
33
|
+
const manifest = apps.filter(Boolean).join("\n---\n");
|
|
35
34
|
return ensureProperDomainsPresent(manifest, monorepoEnv, image);
|
|
36
35
|
}
|
|
37
36
|
export function generateWorkspaceDeployment(packageData, monorepoEnv, image, gitSha) {
|
|
@@ -42,7 +41,7 @@ export function generateWorkspaceDeployment(packageData, monorepoEnv, image, git
|
|
|
42
41
|
const manifest = generateManifestForDeployment(packageData.rootPath, packageData.deployment.template, renderFn).join("\n---\n");
|
|
43
42
|
return ensureProperDomainsPresent(manifest, monorepoEnv, image);
|
|
44
43
|
}
|
|
45
|
-
export function
|
|
44
|
+
export function generateDebugPod(monorepoEnv, image, gitSha) {
|
|
46
45
|
verifyNotCloudrunImage(image);
|
|
47
46
|
const generator = new ImageContextGenerator(monorepoEnv, image, gitSha);
|
|
48
47
|
const context = generator.getDebug();
|
|
@@ -50,7 +49,7 @@ export function generateDebugDeployment(monorepoEnv, image, gitSha) {
|
|
|
50
49
|
const debugTemplate = getImageData(image)["debug-template"];
|
|
51
50
|
if (!debugTemplate)
|
|
52
51
|
return;
|
|
53
|
-
return generateManifestsFromTemplateName(debugTemplate, renderFn).map(x => yaml.stringify(x)).join("\n---\n");
|
|
52
|
+
return generateManifestsFromTemplateName(debugTemplate, renderFn, { validate: false }).map(x => yaml.stringify(x)).join("\n---\n");
|
|
54
53
|
}
|
|
55
54
|
export function generateDbMigrateJob(monorepoEnv, image, gitSha) {
|
|
56
55
|
verifyNotCloudrunImage(image);
|
|
@@ -79,13 +78,13 @@ function generateManifestForDeployment(rootPath, templateName, renderFn) {
|
|
|
79
78
|
return Object.values(mergedTemplates).map(x => yaml.stringify(x));
|
|
80
79
|
}
|
|
81
80
|
// L2 generation
|
|
82
|
-
function generateManifestsFromTemplateName(templateName, renderFn) {
|
|
81
|
+
function generateManifestsFromTemplateName(templateName, renderFn, options = { validate: true }) {
|
|
83
82
|
const entries = manifestFilesForTemplate(templateName);
|
|
84
83
|
if (!entries) {
|
|
85
84
|
console.error(`No entries found for ${templateName} in ${MANIFEST_INDEX_FILE_PATH}`);
|
|
86
85
|
process.exit(1);
|
|
87
86
|
}
|
|
88
|
-
return generateManifestsFromFileList(entries.map(entry => path.join(MANIFEST_FOLDER_PATH, entry)), renderFn);
|
|
87
|
+
return generateManifestsFromFileList(entries.map(entry => path.join(MANIFEST_FOLDER_PATH, entry)), renderFn, options);
|
|
89
88
|
}
|
|
90
89
|
// L2 generation
|
|
91
90
|
function generateManifestFromFilesInFolder(folderPath, renderFn) {
|
|
@@ -97,19 +96,21 @@ function generateManifestFromFilesInFolder(folderPath, renderFn) {
|
|
|
97
96
|
return generateManifestsFromFileList(files, renderFn);
|
|
98
97
|
}
|
|
99
98
|
// L3 generation
|
|
100
|
-
function generateManifestsFromFileList(filesList, renderFn) {
|
|
99
|
+
function generateManifestsFromFileList(filesList, renderFn, options = { validate: true }) {
|
|
101
100
|
return filesList.flatMap((filePath) => {
|
|
102
101
|
try {
|
|
103
102
|
const manifestFileStr = fs.readFileSync(filePath, 'utf8');
|
|
104
103
|
const renderedStr = renderFn(manifestFileStr);
|
|
105
104
|
const res = yaml.parseAllDocuments(renderedStr);
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
105
|
+
if (options.validate) {
|
|
106
|
+
res.forEach((doc) => {
|
|
107
|
+
if (!doc.get("kind") || !doc.getIn(["metadata", "name"])) {
|
|
108
|
+
console.error(`Invalid manifest file ${filePath}: kind and metadata.name must be present`);
|
|
109
|
+
console.error(doc.toString());
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
113
114
|
return res.map(x => x.toJSON());
|
|
114
115
|
}
|
|
115
116
|
catch (e) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s-redis-bitnami.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-redis-bitnami.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,kBAK3B;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM;;SAajD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAKnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s-redis-ha.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-redis-ha.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,kBAK3B;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAKnE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CommandExecutor } from "../cli/common";
|
|
2
|
+
import { kubectlCommand } from "./k8s-helpers";
|
|
3
|
+
export function getRedisList() {
|
|
4
|
+
const cmd = kubectlCommand(`get pods -l app=redis-ha -A`);
|
|
5
|
+
const res = new CommandExecutor(cmd, { quiet: true }).exec();
|
|
6
|
+
if (!res)
|
|
7
|
+
return null;
|
|
8
|
+
return res;
|
|
9
|
+
}
|
|
10
|
+
export function establishRedisTunnel(namespace, port) {
|
|
11
|
+
const cmd = kubectlCommand(`port-forward svc/${namespace}-redis-ha ${port}:6379`, {
|
|
12
|
+
namespace,
|
|
13
|
+
});
|
|
14
|
+
new CommandExecutor(cmd).spawn();
|
|
15
|
+
}
|