我正在创建一个厨师食谱,以使用正则表达式在所有主机名与特定模式匹配的服务器上应用配置更改。但是,我不知道该怎么做。
示例:我的主机名如下所示:
- 德瓦布维奇01
- DVCDWICHF01
我在 default.rb 中的食谱是:
case node['hostname']
when '*ab*'
template "/tmp/regextest" do
source "test_ab.erb"
mode "0644"
end
else
template "/tmp/regextest" do
source "test_cd.erb"
mode "0644"
end
end
但这并没有按预期工作,只有"else"模板在所有服务器上更新。 请协助。
您需要使用实际的正则表达式,而不是像那里那样的字符串(您也使用 fnmatch glob 匹配,而不是正则表达式)。这只会在主机名字面上*ab*
时修复。Ruby 中的正则表达式文本通常看起来像 /whatever/
。在这种情况下when /ab/
如此。
我使用 switch 通过在帮助程序文件中添加一个方法来选择值(在我的情况下,我将其放入/应用程序/助手/application_helper.rb示例如下: def name_of_your_method(主机名) 案例主机名 当"主机1"时 "template_1" 当"主机2"时 "template_2" 当"主机2"时 "template_3" 当"主机3"时 "template_4" 还 "template_default" 结束 结束
然后在代码中,您将在方法中使用该名称:
<%= user.hostname %>
在您的表(数据)中,您将有一列主机名(在本例中)
希望这有帮助