7
7
8
8
const path = require ( 'path' ) ;
9
9
const { readFile } = require ( 'fs/promises' ) ;
10
- const jsYaml = require ( 'js-yaml' ) ;
11
10
12
11
const i18n = require ( './i18next.config' ) ;
13
12
const childProcessExecutor = require ( './childProcessExecutor' ) ;
@@ -19,15 +18,10 @@ const errorUtils = require('./errorUtils');
19
18
20
19
const MINIMUM_WDT_PREPARE_VERSION = '2.0.0' ;
21
20
22
- const _secretsFileName = 'k8s_secrets.json' ;
23
- const _wkoDomainSpecFileName = 'wko-domain.yaml' ;
24
- const _vzApplicationSpecFileName = 'vz-application.yaml' ;
21
+ const _resultsFileName = 'results.json' ;
25
22
26
23
const _deleteTempDirectory = true ;
27
24
28
- const _wkoTargetTypeName = i18n . t ( 'prepare-model-wko-target-type-name' ) ;
29
- const _vzTargetTypeName = i18n . t ( 'prepare-model-wko-target-type-name' ) ;
30
-
31
25
async function prepareModel ( currentWindow , stdoutChannel , stderrChannel , prepareConfig ) {
32
26
const logger = getLogger ( ) ;
33
27
const { javaHome, oracleHome, projectDirectory, modelsSubdirectory, modelFiles,
@@ -119,7 +113,9 @@ async function prepareModel(currentWindow, stdoutChannel, stderrChannel, prepare
119
113
}
120
114
121
115
try {
122
- results [ 'secrets' ] = await getJsonSecretsContent ( outputDirectory ) ;
116
+ const jsonResults = await getJsonResultsContent ( outputDirectory ) ;
117
+ results [ 'secrets' ] = jsonResults [ 'secrets' ] ;
118
+ results [ 'domain' ] = jsonResults [ 'domain' ] ;
123
119
} catch ( err ) {
124
120
results . isSuccess = false ;
125
121
results . reason = errorUtils . getErrorMessage ( err ) ;
@@ -129,14 +125,6 @@ async function prepareModel(currentWindow, stdoutChannel, stderrChannel, prepare
129
125
return Promise . resolve ( results ) ;
130
126
}
131
127
132
- try {
133
- results [ 'domain' ] = await getTargetSpecContent ( wdtTargetType , outputDirectory ) ;
134
- } catch ( err ) {
135
- results . isSuccess = false ;
136
- results . reason = errorUtils . getErrorMessage ( err ) ;
137
- results . error = err ;
138
- logger . error ( results . reason ) ;
139
- }
140
128
removeTempDirectory ( outputDirectory ) . then ( ) . catch ( ) ;
141
129
return Promise . resolve ( results ) ;
142
130
}
@@ -228,49 +216,48 @@ function getUpdatedModelFileNames(updatedFileMap, files) {
228
216
return updatedFiles ;
229
217
}
230
218
231
- async function getJsonSecretsContent ( outputDirectory ) {
232
- const secretsFileName = path . join ( outputDirectory , _secretsFileName ) ;
219
+ async function getJsonResultsContent ( outputDirectory ) {
220
+ const resultsFileName = path . join ( outputDirectory , _resultsFileName ) ;
233
221
234
222
return new Promise ( ( resolve , reject ) => {
235
- fsUtils . exists ( secretsFileName ) . then ( doesExist => {
223
+ fsUtils . exists ( resultsFileName ) . then ( doesExist => {
236
224
if ( ! doesExist ) {
237
- return reject ( new Error ( i18n . t ( 'prepare-model-secrets -file-missing-error-message' ,
238
- { fileName : secretsFileName } ) ) ) ;
225
+ return reject ( new Error ( i18n . t ( 'prepare-model-results -file-missing-error-message' ,
226
+ { fileName : resultsFileName } ) ) ) ;
239
227
}
240
228
241
- readFile ( secretsFileName , { encoding : 'utf8' } ) . then ( data => {
229
+ readFile ( resultsFileName , { encoding : 'utf8' } ) . then ( data => {
242
230
let jsonContent ;
243
231
try {
244
232
jsonContent = JSON . parse ( data ) ;
245
- resolve ( formatSecretsData ( jsonContent ) ) ;
233
+ resolve ( formatResultsData ( jsonContent ) ) ;
246
234
} catch ( err ) {
247
- const error = new Error ( i18n . t ( 'prepare-model-secrets -file-parse-error-message' ,
248
- { fileName : secretsFileName , error : errorUtils . getErrorMessage ( err ) } ) ) ;
235
+ const error = new Error ( i18n . t ( 'prepare-model-results -file-parse-error-message' ,
236
+ { fileName : resultsFileName , error : errorUtils . getErrorMessage ( err ) } ) ) ;
249
237
error . cause = err ;
250
238
reject ( err ) ;
251
239
}
252
240
} ) . catch ( err => {
253
- const error = new Error ( i18n . t ( 'prepare-model-secrets -file-read-error-message' ,
254
- { fileName : secretsFileName , error : errorUtils . getErrorMessage ( err ) } ) ) ;
241
+ const error = new Error ( i18n . t ( 'prepare-model-results -file-read-error-message' ,
242
+ { fileName : resultsFileName , error : errorUtils . getErrorMessage ( err ) } ) ) ;
255
243
error . cause = err ;
256
244
reject ( err ) ;
257
245
} ) ;
258
246
} ) . catch ( err => reject ( err ) ) ;
259
247
} ) ;
260
248
}
261
249
262
- function formatSecretsData ( jsonContent ) {
250
+ function formatResultsData ( jsonContent ) {
263
251
const results = { } ;
264
252
if ( ! jsonContent ) {
265
253
return results ;
266
254
}
267
255
268
- results [ 'domainUID' ] = jsonContent . domainUID ;
269
256
const secrets = jsonContent [ 'secrets' ] || [ ] ;
270
257
results . secrets = [ ] ;
271
- for ( const secret of secrets ) {
258
+ for ( const [ secretName , secret ] of Object . entries ( secrets ) ) {
272
259
const secretResult = {
273
- name : secret [ ' secretName' ]
260
+ name : secretName
274
261
} ;
275
262
const secretKeys = secret [ 'keys' ] ;
276
263
if ( secretKeys ) {
@@ -289,169 +276,30 @@ function formatSecretsData(jsonContent) {
289
276
results . secrets . push ( secretResult ) ;
290
277
}
291
278
}
292
- return results ;
293
- }
294
-
295
- async function getTargetSpecContent ( wdtTargetType , outputDirectory ) {
296
- let result = { } ;
297
- switch ( wdtTargetType ) {
298
- case 'wko' :
299
- result = await getWkoSpecContent ( outputDirectory ) ;
300
- break ;
301
-
302
- case 'vz' :
303
- result = await getVzSpecContent ( outputDirectory ) ;
304
- break ;
305
-
306
- default :
307
- // k8s target produces no spec...
308
- break ;
309
- }
310
- return Promise . resolve ( result ) ;
311
- }
312
-
313
- async function getWkoSpecContent ( outputDirectory ) {
314
- const specFile = path . join ( outputDirectory , _wkoDomainSpecFileName ) ;
315
-
316
- return new Promise ( ( resolve , reject ) => {
317
- fsUtils . exists ( specFile ) . then ( doesExist => {
318
- if ( ! doesExist ) {
319
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-missing-error-message' ,
320
- { targetType : _wkoTargetTypeName , fileName : specFile } ) ) ;
321
- reject ( error ) ;
322
- }
323
279
324
- readFile ( specFile , { encoding : 'utf8' } ) . then ( data => {
325
- try {
326
- const yamlDoc = jsYaml . load ( data , { filename : specFile , json : true } ) ;
327
- resolve ( formatWkoDomainSpecData ( yamlDoc ) ) ;
328
- } catch ( err ) {
329
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-parse-error-message' ,
330
- { targetType : _wkoTargetTypeName , fileName : specFile , error : errorUtils . getErrorMessage ( err ) } ) ) ;
331
- error . cause = err ;
332
- reject ( error ) ;
333
- }
334
- } ) . catch ( err => {
335
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-read-error-message' ,
336
- { targetType : _wkoTargetTypeName , fileName : specFile , error : errorUtils . getErrorMessage ( err ) } ) ) ;
337
- error . cause = err ;
338
- reject ( error ) ;
339
- } ) ;
340
- } ) . catch ( err => reject ( getFileExistsErrorMessage ( _wkoTargetTypeName , specFile , err ) ) ) ;
341
- } ) ;
342
- }
280
+ const domain = { } ;
281
+ domain [ 'domainUID' ] = jsonContent . domainUID ;
343
282
344
- function formatWkoDomainSpecData ( yamlDoc ) {
345
- const result = { } ;
346
- if ( yamlDoc ) {
347
- if ( 'metadata' in yamlDoc && 'name' in yamlDoc [ 'metadata' ] ) {
348
- result [ 'domainUID' ] = yamlDoc [ 'metadata' ] [ 'name' ] ;
349
- }
350
- if ( 'spec' in yamlDoc && 'clusters' in yamlDoc [ 'spec' ] ) {
351
- const clusters = yamlDoc [ 'spec' ] [ 'clusters' ] ;
352
- const clustersResult = [ ] ;
353
- for ( const cluster of clusters ) {
354
- const clusterResult = {
355
- clusterName : cluster [ 'clusterName' ] ,
356
- replicas : cluster [ 'replicas' ] || 0
357
- } ;
358
- clustersResult . push ( clusterResult ) ;
359
- }
360
- result [ 'clusters' ] = clustersResult ;
361
- }
283
+ const clusters = jsonContent [ 'clusters' ] || [ ] ;
284
+ const clustersResult = [ ] ;
285
+ for ( const [ clusterName , cluster ] of Object . entries ( clusters ) ) {
286
+ const clusterResult = {
287
+ clusterName : clusterName ,
288
+ replicas : cluster [ 'serverCount' ] || 0
289
+ } ;
290
+ clustersResult . push ( clusterResult ) ;
362
291
}
363
- return result ;
364
- }
365
-
366
- async function getVzSpecContent ( outputDirectory ) {
367
- const specFile = path . join ( outputDirectory , _vzApplicationSpecFileName ) ;
292
+ domain [ 'clusters' ] = clustersResult ;
368
293
369
- return new Promise ( ( resolve , reject ) => {
370
- fsUtils . exists ( specFile ) . then ( doesExist => {
371
- if ( ! doesExist ) {
372
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-missing-error-message' ,
373
- { targetType : _vzTargetTypeName , fileName : specFile } ) ) ;
374
- reject ( error ) ;
375
- }
376
-
377
- readFile ( specFile , { encoding : 'utf8' } ) . then ( data => {
378
- let yamlDocs ;
379
- try {
380
- yamlDocs = jsYaml . loadAll ( data , { filename : specFile , json : true } ) ;
381
- } catch ( err ) {
382
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-parse-error-message' ,
383
- { targetType : _vzTargetTypeName , fileName : specFile , error : errorUtils . getErrorMessage ( err ) } ) ) ;
384
- error . cause = err ;
385
- reject ( error ) ;
386
- }
387
-
388
- try {
389
- resolve ( formatVzApplicationSpecData ( specFile , yamlDocs ) ) ;
390
- } catch ( err ) {
391
- reject ( err ) ;
392
- }
393
- } ) . catch ( err => {
394
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-read-error-message' ,
395
- { targetType : _vzTargetTypeName , fileName : specFile , error : errorUtils . getErrorMessage ( err ) } ) ) ;
396
- error . cause = err ;
397
- reject ( error ) ;
398
- } ) ;
399
- } ) . catch ( err => reject ( getFileExistsErrorMessage ( _wkoTargetTypeName , specFile , err ) ) ) ;
400
- } ) ;
294
+ results [ 'domain' ] = domain ;
295
+ return results ;
401
296
}
402
297
403
298
function getToolTargetType ( wdtTargetType , targetDomainLocation ) {
404
299
const suffix = targetDomainLocation === 'mii' ? '' : `-${ targetDomainLocation } ` ;
405
300
return `${ wdtTargetType } ${ suffix } ` ;
406
301
}
407
302
408
- function getFileExistsErrorMessage ( targetType , fileName , err ) {
409
- const error = new Error ( i18n . t ( 'prepare-model-spec-file-exists-error-message' ,
410
- { targetType : targetType , fileName : fileName , error : errorUtils . getErrorMessage ( err ) } ) ) ;
411
- error . cause = err ;
412
- return error ;
413
- }
414
-
415
- function formatVzApplicationSpecData ( specFile , yamlDocs ) {
416
- const domainSpec = findVzDomainSpec ( specFile , yamlDocs ) ;
417
- const domainUID = domainSpec . domainUID ;
418
-
419
- const clustersResult = [ ] ;
420
- if ( domainSpec . clusters ) {
421
- for ( const cluster of domainSpec . clusters ) {
422
- clustersResult . push ( { clusterName : cluster . clusterName , replicas : cluster . replicas } ) ;
423
- }
424
- }
425
- return {
426
- domainUID : domainUID ,
427
- clusters : clustersResult
428
- } ;
429
- }
430
-
431
- function findVzDomainSpec ( specFile , yamlDocs ) {
432
- let result ;
433
- if ( yamlDocs && yamlDocs . length > 0 ) {
434
- for ( const yamlDoc of yamlDocs ) {
435
- if ( yamlDoc [ 'kind' ] !== 'Component' ) {
436
- continue ;
437
- }
438
- if ( yamlDoc . spec ?. workload ?. kind === 'VerrazzanoWebLogicWorkload' ) {
439
- result = yamlDoc ;
440
- break ;
441
- }
442
- }
443
- }
444
-
445
- if ( ! result ) {
446
- throw new Error ( i18n . t ( 'prepare-model-vz-spec-file-missing-domain-error-message' , { fileName : specFile } ) ) ;
447
- } else if ( ! result . spec ?. workload ?. spec ?. template ?. spec ) {
448
- throw new Error ( i18n . t ( 'prepare-model-vz-spec-file-missing-spec-error-message' , { fileName : specFile } ) ) ;
449
- } else {
450
- result = result . spec . workload . spec . template . spec ;
451
- }
452
- return result ;
453
- }
454
-
455
303
module . exports = {
456
304
prepareModel
457
305
} ;
0 commit comments