2017-09-15 43 views
0

我有一個接受布爾值作爲參數的jsonnet函數。假設我有一個jsonnet文件名爲deploy.jsonnet如何將字符串解析爲Jsonnet中的Boolean值

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中的函數,還是可以將字符串解析爲布爾值?

回答

1

是的,這是可能的,通過--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); 
+0

''''--tla-code''''很好,謝謝!是的,已經想出了將字符串轉換爲布爾值的方式,就像你一樣。 –

0

jsonnet不支持提供一個值作爲布爾值,也不支持將字符串解析爲布爾值,所以我已經將參數類型更改爲字符串,並執行字符串比較以解決上述問題,並使用布爾解析

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