2014-06-25 17 views
1

使用傀儡(3.6),我有以下ERB模板木偶ERB模板 - 你如何比較兩個整數

<% if @redis_port != ''%> 
    redis['port'] = <%= @redis_port %>    
<% end %> 

所需的行爲方式是,如果$redis_portnil或空白其它任何東西,然後打印出。否則省略線

redis['port'] = 6379 

$ redis_port在params.pp木偶清單

$ cat params.pp 
class foobar::params { 
    $redis_port  = nil #'6379' 
} 

$ cat init.pp 
class foobar { 
    $redis_port = $foobar::params::redis_port 
} 

爲什麼ERB模板才能正常工作,如果$ redis_port是一個字符串定義?

我試過以下組合,但沒有運氣。


測試矩陣: ($ redis_port是params.pp,if語句是在ERB模板)

$redis_port = '6379' #Success 
<% if @redis_port != ''%> 


$redis_port = 6379 #Fail 
<% if @redis_port != ''%> 


$redis_port = 6379 #Fail 
<% if @redis_port %> 


$redis_port = 6379 #Fail 
<% if scope['::foobar::redis_port'] %> 


$redis_port = 6379 #Fail 
<% if @redis_port != ''%> 


$redis_port = 6379 #Fail 
<% if @redis_port != nil %> 

的puppetlabs資料顯示,我應該能夠簡單地查詢是否價值是零或不只是通過使用@redis_port。

http://docs.puppetlabs.com/guides/templating.html


enter image description here


其他資源

https://ask.puppetlabs.com/question/3420/if-else-statement-in-erb-template/

+0

首先:在**清單**中執行'$ varname = nil'是有缺陷的,因爲'nil'在Puppet語言中沒有特殊含義。你得到字符串'「nil」'作爲一個值。你想要'$ varname = undef',但是要注意的是,如你所發佈的表格所示。 –

+0

謝謝@FelixFrank您的評論引導我選擇正確的答案。我不得不使用undef。如果您發佈答案,我會接受它。 – spuder

回答

0

這裏的核心問題是nil不是木偶保留字,是consi取而代之的是一個非分隔字符串,代表值爲'nil'。由於引用文檔狀態,木偶的關閉模擬爲undef,爲此:

$redis_port = undef 

我驚歎既if @var當清單分配一個整數值if @var != ''的失敗。這應該作爲字符串表示或數值傳播到ERB,對於這兩個表達式應該評估爲true(對於Ruby,如果我沒有弄錯,只有nil和和false是錯誤的)。

我會嘗試重現,這可能是一個錯誤。