@terascope/scripts 0.60.1 → 0.61.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/dist/src/cmds/k8s-env.d.ts +4 -0
- package/dist/src/cmds/k8s-env.d.ts.map +1 -0
- package/dist/src/cmds/k8s-env.js +88 -0
- package/dist/src/cmds/k8s-env.js.map +1 -0
- package/dist/src/cmds/publish.js +3 -3
- package/dist/src/cmds/test.js +1 -1
- package/dist/src/helpers/config.d.ts +3 -2
- package/dist/src/helpers/config.d.ts.map +1 -1
- package/dist/src/helpers/config.js +13 -26
- package/dist/src/helpers/config.js.map +1 -1
- package/dist/src/helpers/k8s-env/index.d.ts +3 -0
- package/dist/src/helpers/k8s-env/index.d.ts.map +1 -0
- package/dist/src/helpers/k8s-env/index.js +104 -0
- package/dist/src/helpers/k8s-env/index.js.map +1 -0
- package/dist/src/helpers/k8s-env/interfaces.d.ts +87 -0
- package/dist/src/helpers/k8s-env/interfaces.d.ts.map +1 -0
- package/dist/src/helpers/k8s-env/interfaces.js +3 -0
- package/dist/src/helpers/k8s-env/interfaces.js.map +1 -0
- package/dist/src/helpers/k8s-env/k8s.d.ts +18 -0
- package/dist/src/helpers/k8s-env/k8s.d.ts.map +1 -0
- package/dist/src/helpers/k8s-env/k8s.js +232 -0
- package/dist/src/helpers/k8s-env/k8s.js.map +1 -0
- package/dist/src/helpers/mapper.d.ts +8 -0
- package/dist/src/helpers/mapper.d.ts.map +1 -0
- package/dist/src/helpers/mapper.js +49 -0
- package/dist/src/helpers/mapper.js.map +1 -0
- package/dist/src/helpers/scripts.d.ts +7 -7
- package/dist/src/helpers/scripts.d.ts.map +1 -1
- package/dist/src/helpers/scripts.js +101 -35
- package/dist/src/helpers/scripts.js.map +1 -1
- package/dist/src/helpers/test-runner/index.js +1 -1
- package/dist/src/helpers/test-runner/index.js.map +1 -1
- package/dist/src/helpers/test-runner/services.d.ts.map +1 -1
- package/dist/src/helpers/test-runner/services.js +4 -3
- package/dist/src/helpers/test-runner/services.js.map +1 -1
- package/dist/src/helpers/test-runner/tracker.js +1 -1
- package/dist/src/helpers/test-runner/tracker.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.K8s = void 0;
|
|
30
|
+
const k8sClient = __importStar(require("@kubernetes/client-node"));
|
|
31
|
+
const fs_1 = __importDefault(require("fs"));
|
|
32
|
+
const ms_1 = __importDefault(require("ms"));
|
|
33
|
+
const path_1 = __importDefault(require("path"));
|
|
34
|
+
const execa_1 = __importDefault(require("execa"));
|
|
35
|
+
const utils_1 = require("@terascope/utils");
|
|
36
|
+
const packages_1 = require("../../helpers/packages");
|
|
37
|
+
const signale_1 = __importDefault(require("../signale"));
|
|
38
|
+
const config = __importStar(require("../config"));
|
|
39
|
+
const scripts_1 = require("../scripts");
|
|
40
|
+
const logger = (0, utils_1.debugLogger)('ts-scripts:k8s-env');
|
|
41
|
+
// TODO: consider setting TS_PORT with an env variable or cmd option
|
|
42
|
+
const TS_PORT = '5678';
|
|
43
|
+
class K8s {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.kc = new k8sClient.KubeConfig();
|
|
46
|
+
this.kc.loadFromDefault();
|
|
47
|
+
this.k8sAppsV1Api = this.kc.makeApiClient(k8sClient.AppsV1Api);
|
|
48
|
+
this.k8sCoreV1Api = this.kc.makeApiClient(k8sClient.CoreV1Api);
|
|
49
|
+
this.k8sRbacAuthorizationV1Api = this.kc.makeApiClient(k8sClient.RbacAuthorizationV1Api);
|
|
50
|
+
this.k8sSchedulingV1Api = this.kc.makeApiClient(k8sClient.SchedulingV1Api);
|
|
51
|
+
this.terasliceNamespace = 'default';
|
|
52
|
+
this.servicesNamespace = 'default';
|
|
53
|
+
}
|
|
54
|
+
async createNamespace(yamlFile, namespaceCategory) {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
signale_1.default.pending(`Creating new namespace for ${namespaceCategory}`);
|
|
57
|
+
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
58
|
+
if (!e2eK8sDir) {
|
|
59
|
+
throw new Error('Missing k8s e2e test directory');
|
|
60
|
+
}
|
|
61
|
+
const namespaceSpec = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, yamlFile)}`, 'utf8'));
|
|
62
|
+
try {
|
|
63
|
+
const createNamespaceRes = await this.k8sCoreV1Api.createNamespace(namespaceSpec);
|
|
64
|
+
if ((_b = (_a = createNamespaceRes === null || createNamespaceRes === void 0 ? void 0 : createNamespaceRes.body) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.name) {
|
|
65
|
+
if (namespaceCategory === 'teraslice') {
|
|
66
|
+
this.terasliceNamespace = createNamespaceRes.body.metadata.name;
|
|
67
|
+
signale_1.default.success(`Teraslice namespace set to ${createNamespaceRes.body.metadata.name}`);
|
|
68
|
+
}
|
|
69
|
+
else if (namespaceCategory === 'services') {
|
|
70
|
+
this.servicesNamespace = createNamespaceRes.body.metadata.name;
|
|
71
|
+
signale_1.default.success(`Services namespace set to ${createNamespaceRes.body.metadata.name}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
signale_1.default.success(`Namespace ${createNamespaceRes.body.metadata.name} created`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
logger.error('Error creating namespace: ', err);
|
|
80
|
+
await (0, scripts_1.destroyKindCluster)();
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async deployK8sTeraslice(wait = false) {
|
|
85
|
+
signale_1.default.pending('Begin teraslice deployment...');
|
|
86
|
+
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
87
|
+
if (!e2eK8sDir) {
|
|
88
|
+
throw new Error('Missing k8s e2e test directory');
|
|
89
|
+
}
|
|
90
|
+
await this.deleteTerasliceNamespace();
|
|
91
|
+
await this.createNamespace('ts-ns.yaml', 'teraslice');
|
|
92
|
+
await this.k8sSetup();
|
|
93
|
+
const baseConfigMap = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'baseConfigmap.yaml')}`, 'utf8'));
|
|
94
|
+
try {
|
|
95
|
+
/// Creates configmap for teraslice-master
|
|
96
|
+
const masterConfigMap = baseConfigMap;
|
|
97
|
+
const masterTerafoundation = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'masterConfig', 'teraslice.yaml')}`, 'utf8'));
|
|
98
|
+
masterConfigMap.data = { 'teraslice.yaml': k8sClient.dumpYaml(masterTerafoundation) };
|
|
99
|
+
masterConfigMap.metadata = { name: 'teraslice-master' };
|
|
100
|
+
const response = await this.k8sCoreV1Api
|
|
101
|
+
.createNamespacedConfigMap(this.terasliceNamespace, masterConfigMap);
|
|
102
|
+
logger.debug('deployK8sTeraslice masterConfigMap:', response.body);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
logger.error('Error creating Teraslice Master Configmap: ', err);
|
|
106
|
+
await (0, scripts_1.destroyKindCluster)();
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
/// Creates configmap for teraslice-worker
|
|
111
|
+
const workerConfigMap = baseConfigMap;
|
|
112
|
+
const workerTerafoundation = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'workerConfig', 'teraslice.yaml')}`, 'utf8'));
|
|
113
|
+
workerConfigMap.data = { 'teraslice.yaml': k8sClient.dumpYaml(workerTerafoundation) };
|
|
114
|
+
workerConfigMap.metadata = { name: 'teraslice-worker' };
|
|
115
|
+
const response = await this.k8sCoreV1Api
|
|
116
|
+
.createNamespacedConfigMap(this.terasliceNamespace, workerConfigMap);
|
|
117
|
+
logger.debug('deployK8sTeraslice workerConfigMap:', response.body);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.error('Error creating Teraslice Worker Configmap: ');
|
|
121
|
+
logger.error(err);
|
|
122
|
+
await (0, scripts_1.destroyKindCluster)();
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
/// Creates master deployment for teraslice
|
|
127
|
+
const yamlTSMasterDeployment = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'masterDeployment.yaml')}`, 'utf8'));
|
|
128
|
+
const response = await this.k8sAppsV1Api.createNamespacedDeployment('ts-dev1', yamlTSMasterDeployment);
|
|
129
|
+
logger.debug('deployK8sTeraslice yamlTSMasterDeployment: ', response.body);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
logger.error('Error creating Teraslice Master Deployment: ');
|
|
133
|
+
logger.error(err);
|
|
134
|
+
await (0, scripts_1.destroyKindCluster)();
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
/// Creates master service for teraslice
|
|
139
|
+
const yamlTSMasterService = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'masterService.yaml')}`, 'utf8'));
|
|
140
|
+
const response = await this.k8sCoreV1Api.createNamespacedService('ts-dev1', yamlTSMasterService);
|
|
141
|
+
logger.debug('deployK8sTeraslice yamlTSMasterService: ', response.body);
|
|
142
|
+
if (wait) {
|
|
143
|
+
await this.waitForTerasliceRunning();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
logger.error('Error creating Teraslice Master Service: ');
|
|
148
|
+
logger.error(err);
|
|
149
|
+
await (0, scripts_1.destroyKindCluster)();
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
signale_1.default.success('Teraslice deployment complete');
|
|
153
|
+
}
|
|
154
|
+
async waitForTerasliceRunning() {
|
|
155
|
+
const startTime = Date.now();
|
|
156
|
+
signale_1.default.pending('Waiting for Teraslice...');
|
|
157
|
+
await this.waitForTerasliceResponse();
|
|
158
|
+
const elapsed = Date.now() - startTime;
|
|
159
|
+
signale_1.default.success('Teraslice is ready to go,', `took ${(0, ms_1.default)(elapsed)}`);
|
|
160
|
+
}
|
|
161
|
+
waitForTerasliceResponse(timeoutMs = 120000) {
|
|
162
|
+
const endAt = Date.now() + timeoutMs;
|
|
163
|
+
const _waitForTerasliceRunning = async () => {
|
|
164
|
+
let response;
|
|
165
|
+
if (Date.now() > endAt) {
|
|
166
|
+
throw new Error(`Failure to communicate with teraslice after ${timeoutMs}ms. Last response from curl request to teraslice root: ${response}`);
|
|
167
|
+
}
|
|
168
|
+
let terasliceRunning = false;
|
|
169
|
+
try {
|
|
170
|
+
// TODO: switch to a teraslice client
|
|
171
|
+
const kubectlResponse = await execa_1.default.command(`curl http://${config.HOST_IP}:${TS_PORT}`);
|
|
172
|
+
response = JSON.parse(kubectlResponse.stdout);
|
|
173
|
+
if (response.clustering_type === 'kubernetes') {
|
|
174
|
+
terasliceRunning = true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
await (0, utils_1.pDelay)(3000);
|
|
179
|
+
return _waitForTerasliceRunning();
|
|
180
|
+
}
|
|
181
|
+
if (terasliceRunning) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
await (0, utils_1.pDelay)(3000);
|
|
185
|
+
return _waitForTerasliceRunning();
|
|
186
|
+
};
|
|
187
|
+
return _waitForTerasliceRunning();
|
|
188
|
+
}
|
|
189
|
+
async k8sSetup() {
|
|
190
|
+
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
191
|
+
if (!e2eK8sDir) {
|
|
192
|
+
throw new Error('Missing k8s e2e test directory');
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const yamlRole = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'role.yaml')}`, 'utf8'));
|
|
196
|
+
const response1 = await this.k8sRbacAuthorizationV1Api
|
|
197
|
+
.createNamespacedRole(this.terasliceNamespace, yamlRole);
|
|
198
|
+
logger.debug('deployK8sTeraslice yamlRole: ', response1.body);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
logger.error('Error creating role: ', err);
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
const yamlRoleBinding = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'roleBinding.yaml')}`, 'utf8'));
|
|
205
|
+
const response2 = await this.k8sRbacAuthorizationV1Api
|
|
206
|
+
.createNamespacedRoleBinding(this.terasliceNamespace, yamlRoleBinding);
|
|
207
|
+
logger.debug('deployK8sTeraslice yamlRoleBinding: ', response2.body);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
logger.error('Error creating roleBinding: ', err);
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
const yamlPriorityClass = k8sClient.loadYaml(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, 'priorityClass.yaml')}`, 'utf8'));
|
|
214
|
+
const response3 = await this.k8sSchedulingV1Api.createPriorityClass(yamlPriorityClass);
|
|
215
|
+
logger.debug('deployK8sTeraslice yamlPriorityClass: ', response3.body);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
logger.error('Error creating priorityClass: ', err);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async deleteTerasliceNamespace() {
|
|
222
|
+
try {
|
|
223
|
+
const response = await this.k8sCoreV1Api.deleteNamespace(this.terasliceNamespace);
|
|
224
|
+
logger.debug('Teraslice namespace and all contents deleted: ', response.body);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
logger.debug('Teraslice namespace cannot be deleted. It might not yet exist.');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.K8s = K8s;
|
|
232
|
+
//# sourceMappingURL=k8s.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s.js","sourceRoot":"","sources":["../../../../src/helpers/k8s-env/k8s.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This function maps a kafka version to the equivalent version of confluent/cp-kafka,
|
|
3
|
+
* which is the kafka docker image currently used in teraslice.
|
|
4
|
+
* The kafka version should include the major and minor versions, but not the patch version.
|
|
5
|
+
* Ref: https://docs.confluent.io/platform/current/installation/versions-interoperability.html#cp-and-apache-ak-compatibility
|
|
6
|
+
*/
|
|
7
|
+
export declare function kafkaVersionMapper(kafkaVersion: string): string;
|
|
8
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../src/helpers/mapper.ts"],"names":[],"mappings":"AAAA;;;;;EAKE;AACF,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA4B/D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.kafkaVersionMapper = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This function maps a kafka version to the equivalent version of confluent/cp-kafka,
|
|
6
|
+
* which is the kafka docker image currently used in teraslice.
|
|
7
|
+
* The kafka version should include the major and minor versions, but not the patch version.
|
|
8
|
+
* Ref: https://docs.confluent.io/platform/current/installation/versions-interoperability.html#cp-and-apache-ak-compatibility
|
|
9
|
+
*/
|
|
10
|
+
function kafkaVersionMapper(kafkaVersion) {
|
|
11
|
+
const regex = /(0|[1-9]\d*)\.(0|[1-9]\d*)/;
|
|
12
|
+
if (!regex.test(kafkaVersion)) {
|
|
13
|
+
throw new Error('Kafka version must contain major and minor semver version, but omit patch version.');
|
|
14
|
+
}
|
|
15
|
+
const kafkaMapper = {
|
|
16
|
+
3: {
|
|
17
|
+
0: '7.0.11',
|
|
18
|
+
1: '7.1.9',
|
|
19
|
+
2: '7.2.7',
|
|
20
|
+
3: '7.3.5',
|
|
21
|
+
4: '7.4.2',
|
|
22
|
+
5: '7.5.1'
|
|
23
|
+
},
|
|
24
|
+
2: {
|
|
25
|
+
4: '5.4.10',
|
|
26
|
+
5: '5.5.12',
|
|
27
|
+
6: '6.0.15',
|
|
28
|
+
7: '6.1.13',
|
|
29
|
+
8: '6.2.12'
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const cpKafkaVersion = kafkaMapper[kafkaVersion.charAt(0)][kafkaVersion.charAt(2)];
|
|
33
|
+
if (!cpKafkaVersion) {
|
|
34
|
+
throw new Error(`Kafka version ${kafkaVersion} could not be mapped to cp-kafka version. Supported version are ${errMsgVersionStringBuilder(kafkaMapper)}.`);
|
|
35
|
+
}
|
|
36
|
+
return cpKafkaVersion;
|
|
37
|
+
}
|
|
38
|
+
exports.kafkaVersionMapper = kafkaVersionMapper;
|
|
39
|
+
function errMsgVersionStringBuilder(map) {
|
|
40
|
+
const msgsArr = [];
|
|
41
|
+
for (const major in map) {
|
|
42
|
+
if (Object.prototype.hasOwnProperty.call(map, major)) {
|
|
43
|
+
const minors = Object.keys(map[major]);
|
|
44
|
+
msgsArr.push(`${major}.${minors[0]}-${major}.${minors[minors.length - 1]}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return msgsArr.join(', ');
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/helpers/mapper.ts"],"names":[],"mappings":";;;AAAA;;;;;EAKE;AACF,SAAgB,kBAAkB,CAAC,YAAoB;IACnD,MAAM,KAAK,GAAG,4BAA4B,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;KACzG;IACD,MAAM,WAAW,GAAG;QAChB,CAAC,EAAE;YACC,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;SACb;QACD,CAAC,EAAE;YACC,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,QAAQ;SACd;KACJ,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,cAAc,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,mEAAmE,0BAA0B,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC/J;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC;AA5BD,gDA4BC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;QACrB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;YAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;SAC/E;KACJ;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -51,19 +51,19 @@ export declare function mapToArgs(input: ArgsMap): string[];
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function yarnPublishV2(pkgInfo: PackageInfo, tag?: string): Promise<void>;
|
|
53
53
|
export declare function yarnPublish(pkgInfo: PackageInfo, tag?: string, registry?: string): Promise<void>;
|
|
54
|
-
export declare function createKindCluster(): Promise<void>;
|
|
54
|
+
export declare function createKindCluster(cmd?: string): Promise<void>;
|
|
55
55
|
export declare function destroyKindCluster(): Promise<void>;
|
|
56
56
|
export declare function isKindInstalled(): Promise<boolean>;
|
|
57
57
|
export declare function isKubectlInstalled(): Promise<boolean>;
|
|
58
|
-
export declare function
|
|
59
|
-
export declare function kindStopService(serviceName: string): Promise<void>;
|
|
58
|
+
export declare function kindLoadTerasliceImage(terasliceImage: string): Promise<void>;
|
|
60
59
|
export declare function kindLoadServiceImage(serviceName: string, serviceImage: string, version: string): Promise<void>;
|
|
61
|
-
export declare function
|
|
60
|
+
export declare function k8sStopService(serviceName: string): Promise<void>;
|
|
61
|
+
export declare function k8sStartService(serviceName: string, image: string, version: string): Promise<void>;
|
|
62
62
|
export declare function createNamespace(namespaceYaml: string): Promise<void>;
|
|
63
63
|
export declare function k8sSetup(): Promise<void>;
|
|
64
|
-
export declare function deployK8sTeraslice(): Promise<void>;
|
|
65
|
-
export declare function setAliasAndBaseAssets(
|
|
64
|
+
export declare function deployK8sTeraslice(wait?: boolean): Promise<void>;
|
|
65
|
+
export declare function setAliasAndBaseAssets(): Promise<void>;
|
|
66
66
|
export declare function deleteTerasliceNamespace(): Promise<void>;
|
|
67
|
-
export declare function showState(
|
|
67
|
+
export declare function showState(): Promise<void>;
|
|
68
68
|
export {};
|
|
69
69
|
//# sourceMappingURL=scripts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../src/helpers/scripts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../src/helpers/scripts.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,17 +26,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.showState = exports.deleteTerasliceNamespace = exports.setAliasAndBaseAssets = exports.deployK8sTeraslice = exports.k8sSetup = exports.createNamespace = exports.
|
|
29
|
+
exports.showState = exports.deleteTerasliceNamespace = exports.setAliasAndBaseAssets = exports.deployK8sTeraslice = exports.k8sSetup = exports.createNamespace = exports.k8sStartService = exports.k8sStopService = exports.kindLoadServiceImage = exports.kindLoadTerasliceImage = exports.isKubectlInstalled = exports.isKindInstalled = exports.destroyKindCluster = exports.createKindCluster = exports.yarnPublish = exports.yarnPublishV2 = exports.mapToArgs = exports.getChangedFiles = exports.gitDiff = exports.getCommitHash = exports.pgrep = exports.dockerPush = exports.dockerBuild = exports.dockerContainerReady = exports.dockerRun = exports.remoteDockerImageExists = exports.dockerNetworkExists = exports.getContainerInfo = exports.dockerTag = exports.dockerStop = exports.dockerPull = exports.runJest = exports.yarnRun = exports.setup = exports.build = exports.runTSScript = exports.fork = exports.exec = void 0;
|
|
30
|
+
const fs_1 = __importDefault(require("fs"));
|
|
31
|
+
const os_1 = __importDefault(require("os"));
|
|
30
32
|
const ms_1 = __importDefault(require("ms"));
|
|
31
33
|
const path_1 = __importDefault(require("path"));
|
|
32
34
|
const execa_1 = __importDefault(require("execa"));
|
|
33
35
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
36
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
34
37
|
const utils_1 = require("@terascope/utils");
|
|
35
38
|
const misc_1 = require("./misc");
|
|
36
39
|
const signale_1 = __importDefault(require("./signale"));
|
|
37
40
|
const config = __importStar(require("./config"));
|
|
38
41
|
const packages_1 = require("../helpers/packages");
|
|
39
42
|
const logger = (0, utils_1.debugLogger)('ts-scripts:cmd');
|
|
43
|
+
let TS_PORT = '45678';
|
|
40
44
|
function _exec(opts) {
|
|
41
45
|
let subprocess;
|
|
42
46
|
const options = {
|
|
@@ -476,12 +480,19 @@ async function yarnPublish(pkgInfo, tag = 'latest', registry = config.NPM_DEFAUL
|
|
|
476
480
|
});
|
|
477
481
|
}
|
|
478
482
|
exports.yarnPublish = yarnPublish;
|
|
479
|
-
async function createKindCluster() {
|
|
483
|
+
async function createKindCluster(cmd = 'test') {
|
|
480
484
|
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
481
485
|
if (!e2eK8sDir) {
|
|
482
486
|
throw new Error('Missing k8s e2e test directory');
|
|
483
487
|
}
|
|
484
|
-
|
|
488
|
+
let configPath;
|
|
489
|
+
if (cmd === 'k8s-env') {
|
|
490
|
+
TS_PORT = '5678';
|
|
491
|
+
configPath = path_1.default.join(e2eK8sDir, 'kindConfigDefaultPorts.yaml');
|
|
492
|
+
}
|
|
493
|
+
else { // cmd === test
|
|
494
|
+
configPath = path_1.default.join(e2eK8sDir, 'kindConfigTestPorts.yaml');
|
|
495
|
+
}
|
|
485
496
|
const subprocess = await execa_1.default.command(`kind create cluster --config ${configPath}`);
|
|
486
497
|
logger.debug(subprocess.stderr);
|
|
487
498
|
}
|
|
@@ -512,12 +523,23 @@ async function isKubectlInstalled() {
|
|
|
512
523
|
}
|
|
513
524
|
exports.isKubectlInstalled = isKubectlInstalled;
|
|
514
525
|
// TODO: check that image is loaded before we continue
|
|
515
|
-
async function
|
|
526
|
+
async function kindLoadTerasliceImage(terasliceImage) {
|
|
516
527
|
const subprocess = await execa_1.default.command(`kind load docker-image ${terasliceImage} --name k8se2e`);
|
|
517
528
|
logger.debug(subprocess.stderr);
|
|
518
529
|
}
|
|
519
|
-
exports.
|
|
520
|
-
|
|
530
|
+
exports.kindLoadTerasliceImage = kindLoadTerasliceImage;
|
|
531
|
+
// TODO: check that image is loaded before we continue
|
|
532
|
+
async function kindLoadServiceImage(serviceName, serviceImage, version) {
|
|
533
|
+
try {
|
|
534
|
+
const subprocess = await execa_1.default.command(`kind load docker-image ${serviceImage}:${version} --name k8se2e`);
|
|
535
|
+
logger.debug(subprocess.stderr);
|
|
536
|
+
}
|
|
537
|
+
catch (err) {
|
|
538
|
+
logger.debug(`The ${serviceName} docker image ${serviceImage}:${version} could not be loaded. It may not be present locally.`);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
exports.kindLoadServiceImage = kindLoadServiceImage;
|
|
542
|
+
async function k8sStopService(serviceName) {
|
|
521
543
|
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
522
544
|
if (!e2eK8sDir) {
|
|
523
545
|
throw new Error('Missing k8s e2e test directory');
|
|
@@ -532,38 +554,44 @@ async function kindStopService(serviceName) {
|
|
|
532
554
|
// Do nothing. This should fail because no services should be up yet.
|
|
533
555
|
}
|
|
534
556
|
}
|
|
535
|
-
exports.
|
|
536
|
-
|
|
537
|
-
//
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
557
|
+
exports.k8sStopService = k8sStopService;
|
|
558
|
+
async function k8sStartService(serviceName, image, version) {
|
|
559
|
+
// services that have an available k8s deployment yaml file
|
|
560
|
+
const availableServices = [
|
|
561
|
+
'elasticsearch', 'kafka', 'zookeeper', // 'opensearch', 'minio', 'rabbitmq'
|
|
562
|
+
];
|
|
563
|
+
if (!availableServices.includes(serviceName)) {
|
|
564
|
+
signale_1.default.error(`Service ${serviceName} is not available. No kubernetes deployment yaml file in 'e2e/k8s' directory.`);
|
|
565
|
+
signale_1.default.info(`Remove ${serviceName} from the services list by running 'unset TEST_${serviceName.toUpperCase()}' in your terminal.`);
|
|
566
|
+
await destroyKindCluster();
|
|
567
|
+
process.exit(1);
|
|
545
568
|
}
|
|
546
|
-
}
|
|
547
|
-
exports.kindLoadServiceImage = kindLoadServiceImage;
|
|
548
|
-
async function kindStartService(serviceName) {
|
|
549
569
|
// Any new service's yaml file must be named '<serviceName>Deployment.yaml'
|
|
550
570
|
const yamlFile = `${serviceName}Deployment.yaml`;
|
|
551
571
|
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
552
572
|
if (!e2eK8sDir) {
|
|
553
573
|
throw new Error('Missing k8s e2e test directory');
|
|
554
574
|
}
|
|
575
|
+
const imageString = `${image}:${version}`;
|
|
555
576
|
try {
|
|
556
|
-
const
|
|
577
|
+
const jsDoc = js_yaml_1.default.loadAll(fs_1.default.readFileSync(`${path_1.default.join(e2eK8sDir, yamlFile)}`, 'utf8'));
|
|
578
|
+
const deployment = jsDoc[0];
|
|
579
|
+
deployment.spec.template.spec.containers[0].image = imageString;
|
|
580
|
+
const updatedYaml = jsDoc.map((doc) => js_yaml_1.default.dump(doc)).join('---\n');
|
|
581
|
+
const tempDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'tempYaml'));
|
|
582
|
+
fs_1.default.writeFileSync(path_1.default.join(tempDir, `${serviceName}Deployment.yaml`), updatedYaml);
|
|
583
|
+
const subprocess = await execa_1.default.command(`kubectl create -n services-dev1 -f ${path_1.default.join(tempDir, `${serviceName}Deployment.yaml`)}`);
|
|
557
584
|
logger.debug(subprocess.stdout);
|
|
585
|
+
fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
558
586
|
}
|
|
559
587
|
catch (err) {
|
|
560
588
|
logger.error(`The service ${serviceName} could not be started: `, err);
|
|
561
589
|
}
|
|
562
590
|
if (serviceName === 'kafka') {
|
|
563
|
-
await waitForKafkaRunning(
|
|
591
|
+
await waitForKafkaRunning();
|
|
564
592
|
}
|
|
565
593
|
}
|
|
566
|
-
exports.
|
|
594
|
+
exports.k8sStartService = k8sStartService;
|
|
567
595
|
function waitForKafkaRunning(timeoutMs = 120000) {
|
|
568
596
|
const endAt = Date.now() + timeoutMs;
|
|
569
597
|
const _waitForKafkaRunning = async () => {
|
|
@@ -583,7 +611,7 @@ function waitForKafkaRunning(timeoutMs = 120000) {
|
|
|
583
611
|
return _waitForKafkaRunning();
|
|
584
612
|
}
|
|
585
613
|
if (kafkaRunning) {
|
|
586
|
-
return
|
|
614
|
+
return;
|
|
587
615
|
}
|
|
588
616
|
await (0, utils_1.pDelay)(3000);
|
|
589
617
|
return _waitForKafkaRunning();
|
|
@@ -612,7 +640,7 @@ async function k8sSetup() {
|
|
|
612
640
|
logger.debug(subprocess.stdout);
|
|
613
641
|
}
|
|
614
642
|
exports.k8sSetup = k8sSetup;
|
|
615
|
-
async function deployK8sTeraslice() {
|
|
643
|
+
async function deployK8sTeraslice(wait = false) {
|
|
616
644
|
const e2eK8sDir = (0, packages_1.getE2eK8sDir)();
|
|
617
645
|
if (!e2eK8sDir) {
|
|
618
646
|
throw new Error('Missing k8s e2e test directory');
|
|
@@ -630,6 +658,11 @@ async function deployK8sTeraslice() {
|
|
|
630
658
|
/// Creates deployment for teraslice
|
|
631
659
|
subprocess = await execa_1.default.command(`kubectl create -n ts-dev1 -f ${path_1.default.join(e2eK8sDir, 'masterDeployment.yaml')}`);
|
|
632
660
|
logger.debug(subprocess.stdout);
|
|
661
|
+
subprocess = await execa_1.default.command(`kubectl create -n ts-dev1 -f ${path_1.default.join(e2eK8sDir, 'masterService.yaml')}`);
|
|
662
|
+
logger.debug(subprocess.stdout);
|
|
663
|
+
if (wait) {
|
|
664
|
+
await waitForTerasliceRunning();
|
|
665
|
+
}
|
|
633
666
|
}
|
|
634
667
|
catch (err) {
|
|
635
668
|
logger.error('Error deploying Teraslice');
|
|
@@ -638,17 +671,50 @@ async function deployK8sTeraslice() {
|
|
|
638
671
|
}
|
|
639
672
|
}
|
|
640
673
|
exports.deployK8sTeraslice = deployK8sTeraslice;
|
|
641
|
-
async function
|
|
642
|
-
|
|
674
|
+
async function waitForTerasliceRunning() {
|
|
675
|
+
const startTime = Date.now();
|
|
676
|
+
signale_1.default.pending('Waiting for Teraslice...');
|
|
677
|
+
await waitForTerasliceResponse();
|
|
678
|
+
const elapsed = Date.now() - startTime;
|
|
679
|
+
signale_1.default.success('Teraslice is ready to go,', `took ${(0, ms_1.default)(elapsed)}`);
|
|
680
|
+
}
|
|
681
|
+
function waitForTerasliceResponse(timeoutMs = 120000) {
|
|
682
|
+
const endAt = Date.now() + timeoutMs;
|
|
683
|
+
const _waitForTerasliceRunning = async () => {
|
|
684
|
+
if (Date.now() > endAt) {
|
|
685
|
+
throw new Error(`Failure to communicate with teraslice after ${timeoutMs}ms`);
|
|
686
|
+
}
|
|
687
|
+
let terasliceRunning = false;
|
|
688
|
+
try {
|
|
689
|
+
const kubectlResponse = await execa_1.default.command(`curl http://${config.HOST_IP}:${TS_PORT}`);
|
|
690
|
+
const response = JSON.parse(kubectlResponse.stdout);
|
|
691
|
+
if (response.clustering_type === 'kubernetes') {
|
|
692
|
+
terasliceRunning = true;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
catch (err) {
|
|
696
|
+
await (0, utils_1.pDelay)(3000);
|
|
697
|
+
return _waitForTerasliceRunning();
|
|
698
|
+
}
|
|
699
|
+
if (terasliceRunning) {
|
|
700
|
+
return true;
|
|
701
|
+
}
|
|
702
|
+
await (0, utils_1.pDelay)(3000);
|
|
703
|
+
return _waitForTerasliceRunning();
|
|
704
|
+
};
|
|
705
|
+
return _waitForTerasliceRunning();
|
|
706
|
+
}
|
|
707
|
+
async function setAliasAndBaseAssets() {
|
|
708
|
+
await setAlias();
|
|
643
709
|
await deployAssets('elasticsearch');
|
|
644
710
|
await deployAssets('standard');
|
|
645
711
|
await deployAssets('kafka');
|
|
646
712
|
}
|
|
647
713
|
exports.setAliasAndBaseAssets = setAliasAndBaseAssets;
|
|
648
|
-
async function setAlias(
|
|
714
|
+
async function setAlias() {
|
|
649
715
|
let subprocess = await execa_1.default.command('earl aliases remove k8se2e 2> /dev/null || true', { shell: true });
|
|
650
716
|
logger.debug(subprocess.stdout);
|
|
651
|
-
subprocess = await execa_1.default.command(`earl aliases add k8se2e http://${
|
|
717
|
+
subprocess = await execa_1.default.command(`earl aliases add k8se2e http://${config.HOST_IP}:${TS_PORT}`);
|
|
652
718
|
logger.debug(subprocess.stdout);
|
|
653
719
|
}
|
|
654
720
|
async function deployAssets(assetName) {
|
|
@@ -665,20 +731,20 @@ async function deleteTerasliceNamespace() {
|
|
|
665
731
|
}
|
|
666
732
|
}
|
|
667
733
|
exports.deleteTerasliceNamespace = deleteTerasliceNamespace;
|
|
668
|
-
async function showState(
|
|
734
|
+
async function showState() {
|
|
669
735
|
const subprocess = await execa_1.default.command('kubectl get deployments,po,svc --all-namespaces --show-labels -o wide');
|
|
670
736
|
logger.debug(subprocess.stdout);
|
|
671
|
-
await showESIndices(
|
|
672
|
-
await showAssets(
|
|
737
|
+
await showESIndices();
|
|
738
|
+
await showAssets();
|
|
673
739
|
}
|
|
674
740
|
exports.showState = showState;
|
|
675
|
-
async function showESIndices(
|
|
676
|
-
const subprocess = await execa_1.default.command(`curl ${
|
|
741
|
+
async function showESIndices() {
|
|
742
|
+
const subprocess = await execa_1.default.command(`curl ${config.HOST_IP}:${config.ELASTICSEARCH_PORT}/_cat/indices?v`);
|
|
677
743
|
logger.debug(subprocess.stdout);
|
|
678
744
|
}
|
|
679
|
-
async function showAssets(
|
|
745
|
+
async function showAssets() {
|
|
680
746
|
try {
|
|
681
|
-
const subprocess = await execa_1.default.command(`curl ${
|
|
747
|
+
const subprocess = await execa_1.default.command(`curl ${config.HOST_IP}:${TS_PORT}/v1/assets`);
|
|
682
748
|
logger.debug(subprocess.stdout);
|
|
683
749
|
}
|
|
684
750
|
catch (err) {
|