如何在Jsonnet中将String解析为Boolen值

时间:2017-09-15 14:02:48

标签: jsonnet

我有一个jsonnet函数,它接受布尔值作为参数。假设我有一个名为deploy.jsonnet的jsonnet文件:

function (image='', isReady) {
local config = self,
deploy: if isReady then [ do deployment ]
else [don't do deployment]

我将值传递给此函数,如:

jsonnet -A name=new-deployment -A isReady=true deploy.jsonnet

但问题是-A始终将值提供为String,因此条件检查将失败,并显示以下消息:

RUNTIME ERROR: Condition must be boolean, got string.
    ./deploy.jsonnet:(133:45)-(148:15)  object <anonymous>
    During manifestation

此外,我没有看到将字符串解析为布尔值的选项。

问题是 - 有没有办法将布尔值传递给jsonnet中的函数,还是可以将字符串解析为布尔值?

2 个答案:

答案 0 :(得分:2)

是的,可以通过--tla-code(而不是-A),例如:

jsonnet -A name=new-deployment --tla-code isReady=true deploy.jsonnet

不同之处在于,它不是将值视为字符串,而是将其视为jsonnet代码。因此,也可以通过这种方式传递对象,数组甚至函数。

关于将字符串转换为布尔值。虽然我认为没有内置的方法可以做到这一点,但很容易推出自己的功能:

local stringToBool(s) =
  if s == "true" then true
  else if s == "false" then false
  else error "invalid boolean: " + std.manifestJson(s);

答案 1 :(得分:0)

jsonnet不支持将值提供为布尔值,并且它不支持将字符串解析为布尔值,因此我将参数类型更改为String并执行字符串比较以使用布尔解析来解决上述问题< / p>

function (image='', isReady='') {
local config = self,
deploy: if (isReady == 'true') then [ do deployment ]
else [don't do deployment]