Robert Grądzki
Robert Grądzki

Reputation: 179

How to retrieve value from LinkedHashMap using variables?

I would like to create variable which allows me to access to vary YAML structures.

envFile is the YAML file contains data like:

ENVNAME:
  MYSYS:
    MYSUBSYS:
      MYDETAIL:
        version: 1.0.0
        path: C:\wwwroot\sys
  MYSYS2:
    MYSUBSYS2:
      version: 1.0.1
      path: C:\wwwroot\sys2

Important is that MYSYS2 doesn't have MYDETAIL level

In Jenkins pipeline I'm using:

envs = readYaml file: envFile

Then I can get version value using:

verNum = envs."${environment}"."${sysName}"."${subSysName}"."${detailName}".version

But when I want get version for MYSYS2 then I should use (no detailName):

verNum = envs."${environment}"."${sysName}"."${subSysName}".version

So I need variable depends on sysName..

I would like to use syntax like:

if (sysName == 'MYSYS'){
  mySuperVariable = "${environment}"."${sysName}"."${subSysName}"."${detailName}"
}
else if (sysName == 'MYSYS2'){
  mySuperVariable = "${environment}"."${sysName}"."${subSysName}"
}

(...)

sysVer = envs."${mySuperVariable}".version

Upvotes: 0

Views: 698

Answers (1)

fishi0x01
fishi0x01

Reputation: 3759

If I remember correctly, you could access maps via map[key][sub-key]. So in your case it would be:

if (sysName == 'MYSYS'){
  mySuperVariable = envs[environment][sysName][subSysName][detailName]
}
else if (sysName == 'MYSYS2'){
  mySuperVariable = envs[environment][sysName][subSysName]
}

(...)

sysVer = mySuperVariable['version']

Upvotes: 1

Related Questions