使用 CHEF 将配方应用于主机名与正则表达式匹配的所有服务器
apply recipe to all the servers whose hostnames matches regexp using CHEF
我正在创建一个 chef 食谱,以使用正则表达式在主机名与特定模式匹配的所有服务器上应用配置更改。但是,我不确定该怎么做。
示例:我的主机名如下所示:
- dvabwichf01
- 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" 模板在所有服务器上更新。请协助。
我通过在我的帮助文件中添加一个方法来使用 switch 选择值(在我的例子中我把它放在 /app/helpers/application_helper.rb
示例如下:
def name_of_your_method(主机名)
案例主机名
当 "Host1"
"template_1"
当 "Host2"
"template_2"
当 "Host2"
"template_3"
当 "Host3"
"template_4"
别的
"template_default"
结尾
结束
然后在您的代码中,您将在方法中使用名称:
<%= user.hostname %>
并且在您的 table(data) 中,您将有一列主机名(在此示例中)
希望对您有所帮助
您需要使用实际的正则表达式,而不是像您那里那样的字符串(而且您使用的是 fnmatch glob 匹配,而不是正则表达式)。这只会在主机名字面意思是 *ab*
时修复。 Ruby 中的正则表达式文字通常看起来像 /whatever/
。所以在这种情况下 when /ab/
。
我正在创建一个 chef 食谱,以使用正则表达式在主机名与特定模式匹配的所有服务器上应用配置更改。但是,我不确定该怎么做。
示例:我的主机名如下所示:
- dvabwichf01
- 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" 模板在所有服务器上更新。请协助。
我通过在我的帮助文件中添加一个方法来使用 switch 选择值(在我的例子中我把它放在 /app/helpers/application_helper.rb 示例如下: def name_of_your_method(主机名) 案例主机名 当 "Host1" "template_1" 当 "Host2" "template_2" 当 "Host2" "template_3" 当 "Host3" "template_4" 别的 "template_default" 结尾 结束
然后在您的代码中,您将在方法中使用名称:
<%= user.hostname %>
并且在您的 table(data) 中,您将有一列主机名(在此示例中)
希望对您有所帮助
您需要使用实际的正则表达式,而不是像您那里那样的字符串(而且您使用的是 fnmatch glob 匹配,而不是正则表达式)。这只会在主机名字面意思是 *ab*
时修复。 Ruby 中的正则表达式文字通常看起来像 /whatever/
。所以在这种情况下 when /ab/
。