在erb中爲Chef寫如此邏輯的最簡潔方法是什麼?如果設置了值,使用erb + Chef爲模板寫入值
<% if node[:ipynb][:NotebookApp][:certfile] %>
c.NotebookApp.certfile = <%= node[:ipynb][:NotebookApp][:certfile] %>
<% end %>
在erb中爲Chef寫如此邏輯的最簡潔方法是什麼?如果設置了值,使用erb + Chef爲模板寫入值
<% if node[:ipynb][:NotebookApp][:certfile] %>
c.NotebookApp.certfile = <%= node[:ipynb][:NotebookApp][:certfile] %>
<% end %>
我不知道什麼地方錯了你的方法,但如果你想要一個班輪,這應該工作:
<%= "c.NotebookApp.certfile = #{node[:ipynb][:NotebookApp][:certfile]}" if node[:ipynb][:NotebookApp][:certfile] %>
對於Ruby的布爾表達式,nil
和false
值翻譯false
,其他一切都是true
。如果您在node[:ipynb][:NotebookApp][:certfile]
中有任何值,它將評估爲true並打印字符串。否則,它不會打印任何內容。
本質上沒什麼錯,我對Ruby有點新,並想知道是否有Rubyisms/Chefisms的最佳實踐。我有很多這樣的配置線,我很想爲它們設置一個功能。謝謝@cbl! –
由於nil的計算結果爲false,因此我將使用 '<%if node [:ipynb] [:NotebookApp] [:certfile]%> c.NotebookApp.certfile = <%= node [:ipynb] [ :NotebookApp] [:certfile]%> <% end %>' –
因爲它更乾淨,所以我會重寫'除非節點[:ipynb] [:NotebookApp] [:certfile] .nil?'爲節點[:ipynb] [:NotebookApp] [:certfile]''。 – timurb
兩年後,我更新了上述@timurb。 ;) –