YAML templating system - how based on env variable determine what the variable contains

47 Views Asked by At

I want that by env variable (string) the varb_letter will get different data from my metadata.

here is what I tried to do.

Can u assist?

thanks!!!

varb_letter: (( env("LANDSCAPE") == 'a' ? asjson(.metadata.a) : env("LANDSCAPE") == 'b' ? asjson(.metadata.b) : env("LANDSCAPE") == 'c' ? asjson(.metadata.c) ))

metadata:
  a:
  b:
  c:

env variable control on the variable data, I'm getting errors of wrong syntax

1

There are 1 best solutions below

3
Marijn On BEST ANSWER

For this answer I assume you use Spiff++ as a templating engine.

There are a few issues:

  • String constants like a need to be enclosed in double quotes, not single quotes, so the correct syntax is env("LANDSCAPE") == "a"
  • The else value must be entered directly after : without a space in between (because that conflicts with default yaml syntax. So the correct syntax for, e.g., the second condition is :env("LANDSCAPE") == "b"
  • You always need an else clause, also for the final condition
  • The metadata needs to be filled

MCVE:

varb_letter: (( env("LANDSCAPE") == "a" ? asjson(.metadata.a) :env("LANDSCAPE") == "b" ? asjson(.metadata.b) :env("LANDSCAPE") == "c" ? asjson(.metadata.c) :false ))

metadata:
  a: 1
  b: 2
  c: 3

Output of spiff++ merge with LANDSCAPE=b for example:

metadata:
  a: 1
  b: 2
  c: 3
varb_letter: "2"