@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 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
- private getDockerPortBindings;
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
- function getProviderPorts(assetVersion, providerVersion) {
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 = getProviderPorts(assetVersion, providerVersion);
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.getDockerPortBindings(blockInstance, assetVersion, providerVersion);
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.getDockerPortBindings(blockInstance, assetVersion, providerVersion);
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
- async getDockerPortBindings(blockInstance, assetVersion, providerVersion) {
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 = getProviderPorts(assetVersion, providerVersion);
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
- private getDockerPortBindings;
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
- function getProviderPorts(assetVersion, providerVersion) {
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 = getProviderPorts(assetVersion, providerVersion);
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.getDockerPortBindings(blockInstance, assetVersion, providerVersion);
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.getDockerPortBindings(blockInstance, assetVersion, providerVersion);
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
- async getDockerPortBindings(blockInstance, assetVersion, providerVersion) {
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 = getProviderPorts(assetVersion, providerVersion);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapeta/local-cluster-service",
3
- "version": "0.36.0",
3
+ "version": "0.36.1",
4
4
  "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
5
  "type": "commonjs",
6
6
  "exports": {
@@ -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
- function getProviderPorts(assetVersion: DefinitionInfo, providerVersion: DefinitionInfo): string[] {
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 = getProviderPorts(assetVersion, providerVersion);
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.getDockerPortBindings(
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.getDockerPortBindings(
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
- private async getDockerPortBindings(
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 = getProviderPorts(assetVersion, providerVersion);
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);
@@ -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) {