2017-02-15 174 views
0

我有我想说的厨师配方使用正则表达式语句:如果红宝石(厨师配方)

“如果服务器的主机名-1结束,然后启用并启动newrelic- sysmond和newrelic-daemon服务,否则禁用这些服务“

使用RegEx确定主机名是否以-1结尾。

使用我下面的尝试,服务似乎启用并启动,无论主机名以-1结束还是不结束。我是很新的Ruby和厨师,所以如果我的代码不正确,我也不会惊讶:

if node["hostname"] =~ /^.*-1$/ 
    service 'newrelic-sysmond' do 
     action [ :enable, :start ] 
    end 
    service 'newrelic-daemon' do 
     action [ :enable, :start ] 
    end 
else 
    service 'newrelic-sysmond' do 
     action [ :disable ] 
    end 
    service 'newrelic-daemon' do 
     action [ :disable ] 
    end 
end 
+3

“node [”hostname“]'value的任何示例都与它们不应该匹配的地方匹配?你可以在你调试之前添加一个'Chef :: Log.warn“测试主机名:#{node ['hostname']}”',看看它在测试什么。 (你的代码对我来说似乎没问题) – Tensibai

+2

这段代码是你的运行列表中唯一的代码吗?也许还有另一个地方定义了相同的服务资源。 (在这种情况下,您应该倒带它而不是重新定义它,请参阅https://docs.chef.io/dsl_recipe.html#edit-resource) – Tensibai

+3

“...确定主机名是否以-1结尾......”然后使用'node [“hostname”]。end_with?(“ - 1”)'。它比你的正则表达式更快,更清晰。如果你坚持使用正则表达式,那么'/ -1 $ /'就足够清晰了。请参阅http://rubular.com/r/E5trSWP2lf和http://rubular.com/r/jVOu4hD6Re它显示您当前的模式是正确的,所以问题在别处。 –

回答

0

有机会的话,该主机名是不是你认为它是。你可能想要像if node['machinename'] =~ /-1$/if node['machinename'].end_with?('-1')。否则,看起来没问题。

+0

根据一个小时前发表的评论来创建答案是值得怀疑的做法。 –

+0

重要的是使用'machinename'而不是'hostname',这在之前没有提到。 – coderanger