Jsonnet中如何将字符串解析为布尔值

How to parse String to Boolen value in 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 总是以字符串形式提供值,因此条件检查将失败并显示消息:

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

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

问题是 - 有什么方法可以将布尔值传递给 jsonnet 中的函数,或者我们可以将字符串解析为布尔值吗?

jsonnet 不支持提供布尔值,也不支持将字符串解析为布尔值,所以我将参数类型更改为字符串并进行字符串比较以解决上述布尔值问题正在解析

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

是的,可以通过 --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);