@platforma-sdk/bootstrap 3.5.21 → 5.0.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/assets/compose-backend.yaml +119 -49
- package/dist/commands/svc/create/arg-parser.cjs +175 -0
- package/dist/commands/svc/create/arg-parser.cjs.map +1 -0
- package/dist/commands/svc/create/arg-parser.d.ts +42 -0
- package/dist/commands/svc/create/arg-parser.js +173 -0
- package/dist/commands/svc/create/arg-parser.js.map +1 -0
- package/dist/commands/svc/create/docker/s3.cjs +26 -3
- package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
- package/dist/commands/svc/create/docker/s3.js +26 -3
- package/dist/commands/svc/create/docker/s3.js.map +1 -1
- package/dist/commands/svc/create/docker.cjs +36 -3
- package/dist/commands/svc/create/docker.cjs.map +1 -1
- package/dist/commands/svc/create/docker.js +36 -3
- package/dist/commands/svc/create/docker.js.map +1 -1
- package/dist/commands/svc/create/local/s3.cjs +21 -3
- package/dist/commands/svc/create/local/s3.cjs.map +1 -1
- package/dist/commands/svc/create/local/s3.js +21 -3
- package/dist/commands/svc/create/local/s3.js.map +1 -1
- package/dist/commands/svc/create/local.cjs +51 -28
- package/dist/commands/svc/create/local.cjs.map +1 -1
- package/dist/commands/svc/create/local.js +51 -28
- package/dist/commands/svc/create/local.js.map +1 -1
- package/dist/core.cjs +174 -44
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +3 -0
- package/dist/core.js +198 -68
- package/dist/core.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js.map +1 -1
- package/dist/package.cjs +21 -2
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/dist/platforma.js +9 -9
- package/dist/platforma.js.map +1 -1
- package/dist/state.js +13 -13
- package/dist/state.js.map +1 -1
- package/dist/templates/compose.cjs +3 -0
- package/dist/templates/compose.cjs.map +1 -1
- package/dist/templates/compose.d.ts +1 -0
- package/dist/templates/compose.js +6 -3
- package/dist/templates/compose.js.map +1 -1
- package/dist/templates/pl-config.cjs +2 -2
- package/dist/templates/pl-config.cjs.map +1 -1
- package/dist/templates/pl-config.js +4 -4
- package/dist/templates/pl-config.js.map +1 -1
- package/dist/util.js +4 -4
- package/dist/util.js.map +1 -1
- package/package.json +4 -4
package/dist/core.cjs
CHANGED
|
@@ -163,6 +163,29 @@ class Core {
|
|
|
163
163
|
GOMAXPROCS: String(options?.configOptions?.numCpu),
|
|
164
164
|
};
|
|
165
165
|
}
|
|
166
|
+
// Process additional environment variables from CLI options
|
|
167
|
+
if (options?.backendCommands) {
|
|
168
|
+
if (!runBinary.runOpts.env) {
|
|
169
|
+
runBinary.runOpts.env = {};
|
|
170
|
+
}
|
|
171
|
+
for (const cmd of options.backendCommands) {
|
|
172
|
+
const equalIndex = cmd.indexOf('=');
|
|
173
|
+
if (equalIndex > 0) {
|
|
174
|
+
const key = cmd.substring(0, equalIndex);
|
|
175
|
+
const value = cmd.substring(equalIndex + 1);
|
|
176
|
+
runBinary.runOpts.env[key] = value;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Process additional backend commands
|
|
184
|
+
if (options?.backendCommands && options.backendCommands.length > 0) {
|
|
185
|
+
this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
|
|
186
|
+
// Add commands as arguments to the binary
|
|
187
|
+
runBinary.args = [...runBinary.args, ...options.backendCommands];
|
|
188
|
+
}
|
|
166
189
|
upCommands.push(runBinary);
|
|
167
190
|
state.setInstanceInfo(instanceName, {
|
|
168
191
|
type: 'process',
|
|
@@ -186,8 +209,8 @@ class Core {
|
|
|
186
209
|
const minioPort = options?.minioPort ?? 9000;
|
|
187
210
|
const instance = this.createLocal(instanceName, {
|
|
188
211
|
...options,
|
|
189
|
-
primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/
|
|
190
|
-
libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/library-bucket/?region=no-region`,
|
|
212
|
+
primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,
|
|
213
|
+
libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,
|
|
191
214
|
});
|
|
192
215
|
const localRoot = options?.configOptions?.localRoot;
|
|
193
216
|
const minioRunCmd = this.createMinio(instanceName, {
|
|
@@ -273,14 +296,14 @@ class Core {
|
|
|
273
296
|
}
|
|
274
297
|
const presignHost = options?.presignHost ?? 'localhost';
|
|
275
298
|
const presignPort = options?.s3Port ?? 9000;
|
|
276
|
-
const primary = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/
|
|
299
|
+
const primary = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);
|
|
277
300
|
if (primary.type !== 'S3') {
|
|
278
301
|
throw new Error('primary storage must have \'S3\' type in \'docker s3\' configuration');
|
|
279
302
|
}
|
|
280
303
|
else {
|
|
281
304
|
primary.presignEndpoint = `http://${presignHost}:${presignPort}`;
|
|
282
305
|
}
|
|
283
|
-
const library = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/library-bucket`);
|
|
306
|
+
const library = plConfig.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);
|
|
284
307
|
if (library.type !== 'S3') {
|
|
285
308
|
throw new Error(`${library.type} storage type is not supported for library storage`);
|
|
286
309
|
}
|
|
@@ -309,13 +332,14 @@ class Core {
|
|
|
309
332
|
['backend', {
|
|
310
333
|
platform: options?.platformOverride,
|
|
311
334
|
mounts: backendMounts,
|
|
335
|
+
commands: options?.backendCommands,
|
|
312
336
|
}],
|
|
313
337
|
]));
|
|
314
338
|
const envs = {
|
|
315
339
|
MINIO_IMAGE: 'quay.io/minio/minio',
|
|
316
340
|
MINIO_STORAGE: storageDir('minio'),
|
|
317
341
|
PL_IMAGE: image,
|
|
318
|
-
|
|
342
|
+
PL_AUTH_HTPASSWD: usersFSPath,
|
|
319
343
|
PL_LICENSE: options?.license,
|
|
320
344
|
PL_LICENSE_FILE: options?.licenseFile,
|
|
321
345
|
PL_LOG_LEVEL: options?.logLevel ?? 'info',
|
|
@@ -331,36 +355,70 @@ class Core {
|
|
|
331
355
|
...this.configureDockerStorage('primary', primary),
|
|
332
356
|
...this.configureDockerStorage('library', library),
|
|
333
357
|
};
|
|
334
|
-
if (options?.grpcAddr)
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
358
|
+
if (options?.grpcAddr) {
|
|
359
|
+
const addrParts = options.grpcAddr.split(':');
|
|
360
|
+
if (addrParts.length === 2) {
|
|
361
|
+
envs.PL_LISTEN_ADDRESS = addrParts[0];
|
|
362
|
+
envs.PL_LISTEN_PORT = addrParts[1];
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
envs.PL_LISTEN_ADDRESS = options.grpcAddr;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
else if (options?.grpcPort) {
|
|
369
|
+
envs.PL_LISTEN_PORT = options.grpcPort.toString();
|
|
370
|
+
}
|
|
371
|
+
if (options?.monitoringAddr) {
|
|
372
|
+
const addrParts = options.monitoringAddr.split(':');
|
|
373
|
+
if (addrParts.length === 2) {
|
|
374
|
+
envs.PL_MONITORING_IP = addrParts[0];
|
|
375
|
+
envs.PL_MONITORING_PORT = addrParts[1];
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
envs.PL_MONITORING_IP = options.monitoringAddr;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else if (options?.monitoringPort) {
|
|
341
382
|
envs.PL_MONITORING_PORT = options.monitoringPort.toString();
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
383
|
+
}
|
|
384
|
+
if (options?.debugAddr) {
|
|
385
|
+
const addrParts = options.debugAddr.split(':');
|
|
386
|
+
if (addrParts.length === 2) {
|
|
387
|
+
envs.PL_DEBUG_IP = addrParts[0];
|
|
388
|
+
envs.PL_DEBUG_PORT = addrParts[1];
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
envs.PL_DEBUG_IP = options.debugAddr;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
else if (options?.debugPort) {
|
|
345
395
|
envs.PL_DEBUG_PORT = options.debugPort.toString();
|
|
396
|
+
}
|
|
346
397
|
if (options?.s3Port)
|
|
347
398
|
envs.MINIO_PORT = options.s3Port.toString();
|
|
348
399
|
if (options?.s3ConsolePort)
|
|
349
400
|
envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();
|
|
350
401
|
if (options?.auth) {
|
|
351
402
|
if (options.auth.enabled) {
|
|
352
|
-
envs['
|
|
403
|
+
envs['PL_NO_AUTH'] = 'false';
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
envs['PL_NO_AUTH'] = 'true';
|
|
353
407
|
}
|
|
354
408
|
if (options.auth.drivers) {
|
|
355
409
|
for (const drv of options.auth.drivers) {
|
|
356
410
|
if (drv.driver === 'htpasswd') {
|
|
357
|
-
envs['
|
|
411
|
+
envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);
|
|
358
412
|
drv.path = '/etc/platforma/users.htpasswd';
|
|
359
413
|
}
|
|
360
414
|
}
|
|
361
415
|
envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);
|
|
362
416
|
}
|
|
363
417
|
}
|
|
418
|
+
// Process additional backend commands
|
|
419
|
+
if (options?.backendCommands && options.backendCommands.length > 0) {
|
|
420
|
+
this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
|
|
421
|
+
}
|
|
364
422
|
state.setInstanceInfo(instanceName, {
|
|
365
423
|
type: 'docker',
|
|
366
424
|
upCommands: [{
|
|
@@ -433,16 +491,17 @@ class Core {
|
|
|
433
491
|
['backend', {
|
|
434
492
|
platform: options?.platformOverride,
|
|
435
493
|
mounts: backendMounts,
|
|
494
|
+
commands: options?.backendCommands,
|
|
436
495
|
}],
|
|
437
496
|
]));
|
|
438
497
|
const primary = plConfig.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');
|
|
439
498
|
const library = plConfig.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');
|
|
440
499
|
const envs = {
|
|
441
500
|
PL_IMAGE: image,
|
|
442
|
-
|
|
501
|
+
PL_AUTH_HTPASSWD: usersFSPath,
|
|
443
502
|
PL_LICENSE: options?.license,
|
|
444
503
|
PL_LICENSE_FILE: options?.licenseFile,
|
|
445
|
-
PL_LOG_LEVEL: 'info',
|
|
504
|
+
PL_LOG_LEVEL: options?.logLevel ?? 'info',
|
|
446
505
|
PL_LOG_DIR: path.dirname(logFilePath),
|
|
447
506
|
PL_LOG_ROTATION_ENABLED: 'true',
|
|
448
507
|
PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',
|
|
@@ -454,32 +513,66 @@ class Core {
|
|
|
454
513
|
...this.configureDockerStorage('primary', primary),
|
|
455
514
|
...this.configureDockerStorage('library', library),
|
|
456
515
|
};
|
|
457
|
-
if (options?.grpcAddr)
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
516
|
+
if (options?.grpcAddr) {
|
|
517
|
+
const addrParts = options.grpcAddr.split(':');
|
|
518
|
+
if (addrParts.length === 2) {
|
|
519
|
+
envs.PL_LISTEN_ADDRESS = addrParts[0];
|
|
520
|
+
envs.PL_LISTEN_PORT = addrParts[1];
|
|
521
|
+
}
|
|
522
|
+
else {
|
|
523
|
+
envs.PL_LISTEN_ADDRESS = options.grpcAddr;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else if (options?.grpcPort) {
|
|
527
|
+
envs.PL_LISTEN_PORT = options.grpcPort.toString();
|
|
528
|
+
}
|
|
529
|
+
if (options?.monitoringAddr) {
|
|
530
|
+
const addrParts = options.monitoringAddr.split(':');
|
|
531
|
+
if (addrParts.length === 2) {
|
|
532
|
+
envs.PL_MONITORING_IP = addrParts[0];
|
|
533
|
+
envs.PL_MONITORING_PORT = addrParts[1];
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
envs.PL_MONITORING_IP = options.monitoringAddr;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
else if (options?.monitoringPort) {
|
|
464
540
|
envs.PL_MONITORING_PORT = options.monitoringPort.toString();
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
541
|
+
}
|
|
542
|
+
if (options?.debugAddr) {
|
|
543
|
+
const addrParts = options.debugAddr.split(':');
|
|
544
|
+
if (addrParts.length === 2) {
|
|
545
|
+
envs.PL_DEBUG_IP = addrParts[0];
|
|
546
|
+
envs.PL_DEBUG_PORT = addrParts[1];
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
envs.PL_DEBUG_IP = options.debugAddr;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
else if (options?.debugPort) {
|
|
468
553
|
envs.PL_DEBUG_PORT = options.debugPort.toString();
|
|
554
|
+
}
|
|
469
555
|
if (options?.auth) {
|
|
470
556
|
if (options.auth.enabled) {
|
|
471
|
-
envs['
|
|
557
|
+
envs['PL_NO_AUTH'] = 'false';
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
envs['PL_NO_AUTH'] = 'true';
|
|
472
561
|
}
|
|
473
562
|
if (options.auth.drivers) {
|
|
474
563
|
for (const drv of options.auth.drivers) {
|
|
475
564
|
if (drv.driver === 'htpasswd') {
|
|
476
|
-
envs['
|
|
565
|
+
envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);
|
|
477
566
|
drv.path = '/etc/platforma/users.htpasswd';
|
|
478
567
|
}
|
|
479
568
|
}
|
|
480
569
|
envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);
|
|
481
570
|
}
|
|
482
571
|
}
|
|
572
|
+
// Process additional backend commands
|
|
573
|
+
if (options?.backendCommands && options.backendCommands.length > 0) {
|
|
574
|
+
this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);
|
|
575
|
+
}
|
|
483
576
|
state.setInstanceInfo(instanceName, {
|
|
484
577
|
type: 'docker',
|
|
485
578
|
upCommands: [{
|
|
@@ -651,21 +744,58 @@ You can obtain the license from "https://licensing.milaboratories.com".`);
|
|
|
651
744
|
storageID = storageID.toUpperCase();
|
|
652
745
|
switch (sType) {
|
|
653
746
|
case 'S3':
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
747
|
+
switch (storageID) {
|
|
748
|
+
case 'PRIMARY': {
|
|
749
|
+
// Construct the S3 URL for primary storage
|
|
750
|
+
if (storage.endpoint && storage.bucketName) {
|
|
751
|
+
envs['PL_DATA_LIBRARY_S3_URL'] = `${storage.endpoint}${storage.bucketName}`;
|
|
752
|
+
}
|
|
753
|
+
if (storage.endpoint)
|
|
754
|
+
envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;
|
|
755
|
+
if (storage.presignEndpoint)
|
|
756
|
+
envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;
|
|
757
|
+
if (storage.region)
|
|
758
|
+
envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;
|
|
759
|
+
if (storage.key)
|
|
760
|
+
envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;
|
|
761
|
+
if (storage.secret)
|
|
762
|
+
envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;
|
|
763
|
+
break;
|
|
764
|
+
}
|
|
765
|
+
case 'LIBRARY': {
|
|
766
|
+
// Construct the S3 URL for library storage
|
|
767
|
+
if (storage.endpoint && storage.bucketName) {
|
|
768
|
+
envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;
|
|
769
|
+
}
|
|
770
|
+
if (storage.endpoint)
|
|
771
|
+
envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;
|
|
772
|
+
if (storage.presignEndpoint)
|
|
773
|
+
envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;
|
|
774
|
+
if (storage.region)
|
|
775
|
+
envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;
|
|
776
|
+
if (storage.key)
|
|
777
|
+
envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;
|
|
778
|
+
if (storage.secret)
|
|
779
|
+
envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;
|
|
780
|
+
break;
|
|
781
|
+
}
|
|
782
|
+
default:
|
|
783
|
+
throw new Error(`Unknown storage ID: ${storageID}`);
|
|
784
|
+
}
|
|
666
785
|
return envs;
|
|
667
786
|
case 'FS':
|
|
668
|
-
|
|
787
|
+
switch (storageID) {
|
|
788
|
+
case 'PRIMARY':
|
|
789
|
+
if (storage.rootPath)
|
|
790
|
+
envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;
|
|
791
|
+
break;
|
|
792
|
+
case 'LIBRARY':
|
|
793
|
+
if (storage.rootPath)
|
|
794
|
+
envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;
|
|
795
|
+
break;
|
|
796
|
+
default:
|
|
797
|
+
throw new Error(`Unknown storage ID: ${storageID}`);
|
|
798
|
+
}
|
|
669
799
|
return envs;
|
|
670
800
|
default:
|
|
671
801
|
util.assertNever();
|