77
88const path = require ( 'path' ) ;
99const { readFile } = require ( 'fs/promises' ) ;
10- const jsYaml = require ( 'js-yaml' ) ;
1110
1211const i18n = require ( './i18next.config' ) ;
1312const childProcessExecutor = require ( './childProcessExecutor' ) ;
@@ -19,15 +18,10 @@ const errorUtils = require('./errorUtils');
1918
2019const MINIMUM_WDT_PREPARE_VERSION = '2.0.0' ;
2120
22- const _secretsFileName = 'k8s_secrets.json' ;
23- const _wkoDomainSpecFileName = 'wko-domain.yaml' ;
24- const _vzApplicationSpecFileName = 'vz-application.yaml' ;
21+ const _resultsFileName = 'results.json' ;
2522
2623const _deleteTempDirectory = true ;
2724
28- const _wkoTargetTypeName = i18n . t ( 'prepare-model-wko-target-type-name' ) ;
29- const _vzTargetTypeName = i18n . t ( 'prepare-model-wko-target-type-name' ) ;
30-
3125async function prepareModel ( currentWindow , stdoutChannel , stderrChannel , prepareConfig ) {
3226 const logger = getLogger ( ) ;
3327 const { javaHome, oracleHome, projectDirectory, modelsSubdirectory, modelFiles,
@@ -119,7 +113,9 @@ async function prepareModel(currentWindow, stdoutChannel, stderrChannel, prepare
119113 }
120114
121115 try {
122- results [ 'secrets' ] = await getJsonSecretsContent ( outputDirectory ) ;
116+ const jsonResults = await getJsonResultsContent ( outputDirectory ) ;
117+ results [ 'secrets' ] = jsonResults [ 'secrets' ] ;
118+ results [ 'domain' ] = jsonResults [ 'domain' ] ;
123119 } catch ( err ) {
124120 results . isSuccess = false ;
125121 results . reason = errorUtils . getErrorMessage ( err ) ;
@@ -129,14 +125,6 @@ async function prepareModel(currentWindow, stdoutChannel, stderrChannel, prepare
129125 return Promise . resolve ( results ) ;
130126 }
131127
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- }
140128 removeTempDirectory ( outputDirectory ) . then ( ) . catch ( ) ;
141129 return Promise . resolve ( results ) ;
142130}
@@ -228,49 +216,48 @@ function getUpdatedModelFileNames(updatedFileMap, files) {
228216 return updatedFiles ;
229217}
230218
231- async function getJsonSecretsContent ( outputDirectory ) {
232- const secretsFileName = path . join ( outputDirectory , _secretsFileName ) ;
219+ async function getJsonResultsContent ( outputDirectory ) {
220+ const resultsFileName = path . join ( outputDirectory , _resultsFileName ) ;
233221
234222 return new Promise ( ( resolve , reject ) => {
235- fsUtils . exists ( secretsFileName ) . then ( doesExist => {
223+ fsUtils . exists ( resultsFileName ) . then ( doesExist => {
236224 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 } ) ) ) ;
239227 }
240228
241- readFile ( secretsFileName , { encoding : 'utf8' } ) . then ( data => {
229+ readFile ( resultsFileName , { encoding : 'utf8' } ) . then ( data => {
242230 let jsonContent ;
243231 try {
244232 jsonContent = JSON . parse ( data ) ;
245- resolve ( formatSecretsData ( jsonContent ) ) ;
233+ resolve ( formatResultsData ( jsonContent ) ) ;
246234 } 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 ) } ) ) ;
249237 error . cause = err ;
250238 reject ( err ) ;
251239 }
252240 } ) . 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 ) } ) ) ;
255243 error . cause = err ;
256244 reject ( err ) ;
257245 } ) ;
258246 } ) . catch ( err => reject ( err ) ) ;
259247 } ) ;
260248}
261249
262- function formatSecretsData ( jsonContent ) {
250+ function formatResultsData ( jsonContent ) {
263251 const results = { } ;
264252 if ( ! jsonContent ) {
265253 return results ;
266254 }
267255
268- results [ 'domainUID' ] = jsonContent . domainUID ;
269256 const secrets = jsonContent [ 'secrets' ] || [ ] ;
270257 results . secrets = [ ] ;
271- for ( const secret of secrets ) {
258+ for ( const [ secretName , secret ] of Object . entries ( secrets ) ) {
272259 const secretResult = {
273- name : secret [ ' secretName' ]
260+ name : secretName
274261 } ;
275262 const secretKeys = secret [ 'keys' ] ;
276263 if ( secretKeys ) {
@@ -289,169 +276,30 @@ function formatSecretsData(jsonContent) {
289276 results . secrets . push ( secretResult ) ;
290277 }
291278 }
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- }
323279
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 ;
343282
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 ) ;
362291 }
363- return result ;
364- }
365-
366- async function getVzSpecContent ( outputDirectory ) {
367- const specFile = path . join ( outputDirectory , _vzApplicationSpecFileName ) ;
292+ domain [ 'clusters' ] = clustersResult ;
368293
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 ;
401296}
402297
403298function getToolTargetType ( wdtTargetType , targetDomainLocation ) {
404299 const suffix = targetDomainLocation === 'mii' ? '' : `-${ targetDomainLocation } ` ;
405300 return `${ wdtTargetType } ${ suffix } ` ;
406301}
407302
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-
455303module . exports = {
456304 prepareModel
457305} ;
0 commit comments