【问题标题】:Write value for template using erb+Chef if value is set如果设置了值,则使用 erb+Chef 为模板写入值
【发布时间】:2013-07-31 02:05:27
【问题描述】:

在 erb 中为 Chef 编写这样的逻辑最简洁的方法是什么?

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

【问题讨论】:

  • 我会将unless node[:ipynb][:NotebookApp][:certfile].nil? 重写为if node[:ipynb][:NotebookApp][:certfile],因为它更简洁。
  • 两年后,我更新了上面的@timurb。 ;)

标签: ruby erb chef-infra chef-recipe


【解决方案1】:

我不确定你的方法有什么问题,但如果你想要一个单线,这应该可行:

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

对于 Ruby 中的布尔表达式,nilfalse 值转换为 false,其他所有值都转换为 true。如果node[:ipynb][:NotebookApp][:certfile] 中有任何值,它将评估为真并打印字符串。否则,它不会打印任何内容。

【讨论】:

  • 本身没有错,我只是对 Ruby 有点陌生,想了解是否有最佳实践 Rubyisms/Chefisms。我有很多这样的配置行,我很想为它们设置一个功能。谢谢@cbl!
  • 由于 nil 的计算结果为 false,我将选择 &lt;% if node[:ipynb][:NotebookApp][:certfile] %&gt; c.NotebookApp.certfile = &lt;%= node[:ipynb][:NotebookApp][:certfile] %&gt; &lt;% end %&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2012-02-15
  • 2017-06-08
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多