我有一个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中的函数,还是可以将字符串解析为布尔值?
答案 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]