2013-07-31 21 views
0

在erb中爲Chef寫如此邏輯的最簡潔方法是什麼?如果設置了值,使用erb + Chef爲模板寫入值

<% if node[:ipynb][:NotebookApp][:certfile] %> 
    c.NotebookApp.certfile = <%= node[:ipynb][:NotebookApp][:certfile] %> 
<% end %> 
+0

因爲它更乾淨,所以我會重寫'除非節點[:ipynb] [:NotebookApp] [:certfile] .nil?'爲節點[:ipynb] [:NotebookApp] [:certfile]''。 – timurb

+1

兩年後,我更新了上述@timurb。 ;) –

回答

2

我不知道什麼地方錯了你的方法,但如果你想要一個班輪,這應該工作:

<%= "c.NotebookApp.certfile = #{node[:ipynb][:NotebookApp][:certfile]}" if node[:ipynb][:NotebookApp][:certfile] %> 

對於Ruby的布爾表達式,nilfalse值翻譯false,其他一切都是true。如果您在node[:ipynb][:NotebookApp][:certfile]中有任何值,它將評估爲true並打印字符串。否則,它不會打印任何內容。

+0

本質上沒什麼錯,我對Ruby有點新,並想知道是否有Rubyisms/Chefisms的最佳實踐。我有很多這樣的配置線,我很想爲它們設置一個功能。謝謝@cbl! –

+0

由於nil的計算結果爲false,因此我將使用 '<%if node [:ipynb] [:NotebookApp] [:certfile]%> c.NotebookApp.certfile = <%= node [:ipynb] [ :NotebookApp] [:certfile]%> <% end %>' –