@kapeta/local-cluster-service 0.36.0 → 0.36.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/CHANGELOG.md +7 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +4 -1
- package/dist/cjs/src/utils/BlockInstanceRunner.js +18 -8
- package/dist/cjs/src/utils/utils.js +2 -2
- package/dist/esm/src/utils/BlockInstanceRunner.d.ts +4 -1
- package/dist/esm/src/utils/BlockInstanceRunner.js +18 -8
- package/dist/esm/src/utils/utils.js +2 -2
- package/package.json +1 -1
- package/src/utils/BlockInstanceRunner.ts +18 -8
- package/src/utils/utils.ts +3 -3
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## [0.36.1](https://github.com/kapetacom/local-cluster-service/compare/v0.36.0...v0.36.1) (2024-02-07)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* Ensure consistent naming for containers ([#124](https://github.com/kapetacom/local-cluster-service/issues/124)) ([f6041e7](https://github.com/kapetacom/local-cluster-service/commit/f6041e781797aa76a44dc9fb1f9f37c6d926a079))
|
7
|
+
|
1
8
|
# [0.36.0](https://github.com/kapetacom/local-cluster-service/compare/v0.35.0...v0.36.0) (2024-02-06)
|
2
9
|
|
3
10
|
|
@@ -19,7 +19,10 @@ export declare class BlockInstanceRunner {
|
|
19
19
|
private _startLocalProcess;
|
20
20
|
private _startDockerProcess;
|
21
21
|
private _startOperatorProcess;
|
22
|
-
|
22
|
+
/**
|
23
|
+
* Get the port bindings for a non-operator block
|
24
|
+
*/
|
25
|
+
private getServiceBlockPortBindings;
|
23
26
|
private ensureContainer;
|
24
27
|
private _handleContainer;
|
25
28
|
}
|
@@ -41,16 +41,23 @@ async function getProvider(uri) {
|
|
41
41
|
});
|
42
42
|
}
|
43
43
|
function resolvePortType(portType) {
|
44
|
-
if (serviceManager_1.HTTP_PORTS.includes(portType)) {
|
44
|
+
if (portType && serviceManager_1.HTTP_PORTS.includes(portType.toLowerCase())) {
|
45
45
|
return serviceManager_1.HTTP_PORT_TYPE;
|
46
46
|
}
|
47
47
|
return portType;
|
48
48
|
}
|
49
49
|
exports.resolvePortType = resolvePortType;
|
50
|
-
|
50
|
+
/**
|
51
|
+
* Get the port types for a non-operator block instance
|
52
|
+
*/
|
53
|
+
function getServiceProviderPorts(assetVersion, providerVersion) {
|
51
54
|
const out = assetVersion.definition?.spec?.providers
|
55
|
+
?.filter((provider) => {
|
56
|
+
// We only support HTTP provider ports for now. Need to figure out how to handle other types
|
57
|
+
return serviceManager_1.HTTP_PORTS.includes(provider.spec?.port?.type?.toLowerCase());
|
58
|
+
})
|
52
59
|
?.map((provider) => {
|
53
|
-
return resolvePortType(provider.spec?.port?.type);
|
60
|
+
return resolvePortType(provider.spec?.port?.type?.toLowerCase());
|
54
61
|
})
|
55
62
|
.filter((t) => !!t) ?? [];
|
56
63
|
if (out.length === 0) {
|
@@ -113,7 +120,7 @@ class BlockInstanceRunner {
|
|
113
120
|
}
|
114
121
|
else {
|
115
122
|
//We need a port type to know how to connect to the block consistently
|
116
|
-
const portTypes =
|
123
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
117
124
|
if (blockUri.version === 'local') {
|
118
125
|
processInfo = await this._startLocalProcess(blockInstance, blockUri, env, assetVersion);
|
119
126
|
}
|
@@ -169,7 +176,7 @@ class BlockInstanceRunner {
|
|
169
176
|
delete localContainer.HostConfig;
|
170
177
|
delete localContainer.Labels;
|
171
178
|
delete localContainer.Env;
|
172
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
179
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion);
|
173
180
|
let HealthCheck = undefined;
|
174
181
|
if (localContainer.healthcheck) {
|
175
182
|
HealthCheck = containerManager_1.containerManager.toDockerHealth({ cmd: localContainer.healthcheck });
|
@@ -241,7 +248,7 @@ class BlockInstanceRunner {
|
|
241
248
|
if (!providerVersion) {
|
242
249
|
throw new Error(`Block type not found: ${kindUri.id}`);
|
243
250
|
}
|
244
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
251
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion);
|
245
252
|
const containerName = await (0, utils_1.getBlockInstanceContainerName)(this._systemId, blockInstance.id, kindUri.id);
|
246
253
|
// For windows we need to default to root
|
247
254
|
const innerHome = process.platform === 'win32' ? '/root/.kapeta' : local_cluster_config_1.default.getKapetaBasedir();
|
@@ -374,12 +381,15 @@ class BlockInstanceRunner {
|
|
374
381
|
});
|
375
382
|
return task.wait();
|
376
383
|
}
|
377
|
-
|
384
|
+
/**
|
385
|
+
* Get the port bindings for a non-operator block
|
386
|
+
*/
|
387
|
+
async getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion) {
|
378
388
|
const bindHost = (0, utils_1.getBindHost)();
|
379
389
|
const ExposedPorts = {};
|
380
390
|
const addonEnv = {};
|
381
391
|
const PortBindings = {};
|
382
|
-
const portTypes =
|
392
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
383
393
|
let port = 80;
|
384
394
|
const promises = portTypes.map(async (portType) => {
|
385
395
|
const publicPort = await serviceManager_1.serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
|
@@ -35,9 +35,9 @@ async function getBlockInstanceContainerName(systemId, instanceId, blockType) {
|
|
35
35
|
}
|
36
36
|
if ((0, nodejs_utils_1.parseKapetaUri)(typeDefinition.definition.kind).fullName === operatorManager_1.KIND_BLOCK_OPERATOR &&
|
37
37
|
typeDefinition.definition.spec?.local?.singleton) {
|
38
|
-
return `kapeta-instance-operator-${(0, md5_1.default)(systemId + blockType)}`;
|
38
|
+
return `kapeta-instance-operator-${(0, md5_1.default)((0, nodejs_utils_1.normalizeKapetaUri)(systemId) + (0, nodejs_utils_1.normalizeKapetaUri)(blockType))}`;
|
39
39
|
}
|
40
|
-
return `kapeta-block-instance-${(0, md5_1.default)(systemId + instanceId)}`;
|
40
|
+
return `kapeta-block-instance-${(0, md5_1.default)((0, nodejs_utils_1.normalizeKapetaUri)(systemId) + instanceId)}`;
|
41
41
|
}
|
42
42
|
exports.getBlockInstanceContainerName = getBlockInstanceContainerName;
|
43
43
|
function toPortInfo(port) {
|
@@ -19,7 +19,10 @@ export declare class BlockInstanceRunner {
|
|
19
19
|
private _startLocalProcess;
|
20
20
|
private _startDockerProcess;
|
21
21
|
private _startOperatorProcess;
|
22
|
-
|
22
|
+
/**
|
23
|
+
* Get the port bindings for a non-operator block
|
24
|
+
*/
|
25
|
+
private getServiceBlockPortBindings;
|
23
26
|
private ensureContainer;
|
24
27
|
private _handleContainer;
|
25
28
|
}
|
@@ -41,16 +41,23 @@ async function getProvider(uri) {
|
|
41
41
|
});
|
42
42
|
}
|
43
43
|
function resolvePortType(portType) {
|
44
|
-
if (serviceManager_1.HTTP_PORTS.includes(portType)) {
|
44
|
+
if (portType && serviceManager_1.HTTP_PORTS.includes(portType.toLowerCase())) {
|
45
45
|
return serviceManager_1.HTTP_PORT_TYPE;
|
46
46
|
}
|
47
47
|
return portType;
|
48
48
|
}
|
49
49
|
exports.resolvePortType = resolvePortType;
|
50
|
-
|
50
|
+
/**
|
51
|
+
* Get the port types for a non-operator block instance
|
52
|
+
*/
|
53
|
+
function getServiceProviderPorts(assetVersion, providerVersion) {
|
51
54
|
const out = assetVersion.definition?.spec?.providers
|
55
|
+
?.filter((provider) => {
|
56
|
+
// We only support HTTP provider ports for now. Need to figure out how to handle other types
|
57
|
+
return serviceManager_1.HTTP_PORTS.includes(provider.spec?.port?.type?.toLowerCase());
|
58
|
+
})
|
52
59
|
?.map((provider) => {
|
53
|
-
return resolvePortType(provider.spec?.port?.type);
|
60
|
+
return resolvePortType(provider.spec?.port?.type?.toLowerCase());
|
54
61
|
})
|
55
62
|
.filter((t) => !!t) ?? [];
|
56
63
|
if (out.length === 0) {
|
@@ -113,7 +120,7 @@ class BlockInstanceRunner {
|
|
113
120
|
}
|
114
121
|
else {
|
115
122
|
//We need a port type to know how to connect to the block consistently
|
116
|
-
const portTypes =
|
123
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
117
124
|
if (blockUri.version === 'local') {
|
118
125
|
processInfo = await this._startLocalProcess(blockInstance, blockUri, env, assetVersion);
|
119
126
|
}
|
@@ -169,7 +176,7 @@ class BlockInstanceRunner {
|
|
169
176
|
delete localContainer.HostConfig;
|
170
177
|
delete localContainer.Labels;
|
171
178
|
delete localContainer.Env;
|
172
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
179
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion);
|
173
180
|
let HealthCheck = undefined;
|
174
181
|
if (localContainer.healthcheck) {
|
175
182
|
HealthCheck = containerManager_1.containerManager.toDockerHealth({ cmd: localContainer.healthcheck });
|
@@ -241,7 +248,7 @@ class BlockInstanceRunner {
|
|
241
248
|
if (!providerVersion) {
|
242
249
|
throw new Error(`Block type not found: ${kindUri.id}`);
|
243
250
|
}
|
244
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
251
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion);
|
245
252
|
const containerName = await (0, utils_1.getBlockInstanceContainerName)(this._systemId, blockInstance.id, kindUri.id);
|
246
253
|
// For windows we need to default to root
|
247
254
|
const innerHome = process.platform === 'win32' ? '/root/.kapeta' : local_cluster_config_1.default.getKapetaBasedir();
|
@@ -374,12 +381,15 @@ class BlockInstanceRunner {
|
|
374
381
|
});
|
375
382
|
return task.wait();
|
376
383
|
}
|
377
|
-
|
384
|
+
/**
|
385
|
+
* Get the port bindings for a non-operator block
|
386
|
+
*/
|
387
|
+
async getServiceBlockPortBindings(blockInstance, assetVersion, providerVersion) {
|
378
388
|
const bindHost = (0, utils_1.getBindHost)();
|
379
389
|
const ExposedPorts = {};
|
380
390
|
const addonEnv = {};
|
381
391
|
const PortBindings = {};
|
382
|
-
const portTypes =
|
392
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
383
393
|
let port = 80;
|
384
394
|
const promises = portTypes.map(async (portType) => {
|
385
395
|
const publicPort = await serviceManager_1.serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
|
@@ -35,9 +35,9 @@ async function getBlockInstanceContainerName(systemId, instanceId, blockType) {
|
|
35
35
|
}
|
36
36
|
if ((0, nodejs_utils_1.parseKapetaUri)(typeDefinition.definition.kind).fullName === operatorManager_1.KIND_BLOCK_OPERATOR &&
|
37
37
|
typeDefinition.definition.spec?.local?.singleton) {
|
38
|
-
return `kapeta-instance-operator-${(0, md5_1.default)(systemId + blockType)}`;
|
38
|
+
return `kapeta-instance-operator-${(0, md5_1.default)((0, nodejs_utils_1.normalizeKapetaUri)(systemId) + (0, nodejs_utils_1.normalizeKapetaUri)(blockType))}`;
|
39
39
|
}
|
40
|
-
return `kapeta-block-instance-${(0, md5_1.default)(systemId + instanceId)}`;
|
40
|
+
return `kapeta-block-instance-${(0, md5_1.default)((0, nodejs_utils_1.normalizeKapetaUri)(systemId) + instanceId)}`;
|
41
41
|
}
|
42
42
|
exports.getBlockInstanceContainerName = getBlockInstanceContainerName;
|
43
43
|
function toPortInfo(port) {
|
package/package.json
CHANGED
@@ -48,17 +48,24 @@ async function getProvider(uri: KapetaURI) {
|
|
48
48
|
}
|
49
49
|
|
50
50
|
export function resolvePortType(portType: string) {
|
51
|
-
if (HTTP_PORTS.includes(portType)) {
|
51
|
+
if (portType && HTTP_PORTS.includes(portType.toLowerCase())) {
|
52
52
|
return HTTP_PORT_TYPE;
|
53
53
|
}
|
54
54
|
return portType;
|
55
55
|
}
|
56
56
|
|
57
|
-
|
57
|
+
/**
|
58
|
+
* Get the port types for a non-operator block instance
|
59
|
+
*/
|
60
|
+
function getServiceProviderPorts(assetVersion: DefinitionInfo, providerVersion: DefinitionInfo): string[] {
|
58
61
|
const out =
|
59
62
|
assetVersion.definition?.spec?.providers
|
63
|
+
?.filter((provider: any) => {
|
64
|
+
// We only support HTTP provider ports for now. Need to figure out how to handle other types
|
65
|
+
return HTTP_PORTS.includes(provider.spec?.port?.type?.toLowerCase());
|
66
|
+
})
|
60
67
|
?.map((provider: any) => {
|
61
|
-
return resolvePortType(provider.spec?.port?.type);
|
68
|
+
return resolvePortType(provider.spec?.port?.type?.toLowerCase());
|
62
69
|
})
|
63
70
|
.filter((t: any) => !!t) ?? [];
|
64
71
|
|
@@ -137,7 +144,7 @@ export class BlockInstanceRunner {
|
|
137
144
|
processInfo = await this._startOperatorProcess(blockInstance, blockUri, providerVersion, env);
|
138
145
|
} else {
|
139
146
|
//We need a port type to know how to connect to the block consistently
|
140
|
-
const portTypes =
|
147
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
141
148
|
|
142
149
|
if (blockUri.version === 'local') {
|
143
150
|
processInfo = await this._startLocalProcess(blockInstance, blockUri, env, assetVersion);
|
@@ -217,7 +224,7 @@ export class BlockInstanceRunner {
|
|
217
224
|
delete localContainer.Labels;
|
218
225
|
delete localContainer.Env;
|
219
226
|
|
220
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
227
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(
|
221
228
|
blockInstance,
|
222
229
|
assetVersion,
|
223
230
|
providerVersion
|
@@ -317,7 +324,7 @@ export class BlockInstanceRunner {
|
|
317
324
|
throw new Error(`Block type not found: ${kindUri.id}`);
|
318
325
|
}
|
319
326
|
|
320
|
-
const { PortBindings, ExposedPorts, addonEnv } = await this.
|
327
|
+
const { PortBindings, ExposedPorts, addonEnv } = await this.getServiceBlockPortBindings(
|
321
328
|
blockInstance,
|
322
329
|
assetVersion,
|
323
330
|
providerVersion
|
@@ -497,7 +504,10 @@ export class BlockInstanceRunner {
|
|
497
504
|
return task.wait();
|
498
505
|
}
|
499
506
|
|
500
|
-
|
507
|
+
/**
|
508
|
+
* Get the port bindings for a non-operator block
|
509
|
+
*/
|
510
|
+
private async getServiceBlockPortBindings(
|
501
511
|
blockInstance: BlockProcessParams,
|
502
512
|
assetVersion: DefinitionInfo,
|
503
513
|
providerVersion: DefinitionInfo
|
@@ -507,7 +517,7 @@ export class BlockInstanceRunner {
|
|
507
517
|
const addonEnv: StringMap = {};
|
508
518
|
const PortBindings: AnyMap = {};
|
509
519
|
|
510
|
-
const portTypes =
|
520
|
+
const portTypes = getServiceProviderPorts(assetVersion, providerVersion);
|
511
521
|
let port = 80;
|
512
522
|
const promises = portTypes.map(async (portType) => {
|
513
523
|
const publicPort = await serviceManager.ensureServicePort(this._systemId, blockInstance.id, portType);
|
package/src/utils/utils.ts
CHANGED
@@ -11,7 +11,7 @@ import _ from 'lodash';
|
|
11
11
|
import { AnyMap, PortInfo } from '../types';
|
12
12
|
import ClusterConfiguration from '@kapeta/local-cluster-config';
|
13
13
|
import { definitionsManager } from '../definitionsManager';
|
14
|
-
import { parseKapetaUri } from '@kapeta/nodejs-utils';
|
14
|
+
import { normalizeKapetaUri, parseKapetaUri } from '@kapeta/nodejs-utils';
|
15
15
|
import { KIND_BLOCK_OPERATOR } from '../operatorManager';
|
16
16
|
import { assetManager } from '../assetManager';
|
17
17
|
|
@@ -35,10 +35,10 @@ export async function getBlockInstanceContainerName(systemId: string, instanceId
|
|
35
35
|
parseKapetaUri(typeDefinition.definition.kind).fullName === KIND_BLOCK_OPERATOR &&
|
36
36
|
typeDefinition.definition.spec?.local?.singleton
|
37
37
|
) {
|
38
|
-
return `kapeta-instance-operator-${md5(systemId + blockType)}`;
|
38
|
+
return `kapeta-instance-operator-${md5(normalizeKapetaUri(systemId) + normalizeKapetaUri(blockType))}`;
|
39
39
|
}
|
40
40
|
|
41
|
-
return `kapeta-block-instance-${md5(systemId + instanceId)}`;
|
41
|
+
return `kapeta-block-instance-${md5(normalizeKapetaUri(systemId) + instanceId)}`;
|
42
42
|
}
|
43
43
|
|
44
44
|
export function toPortInfo(port: PortInfo) {
|