2017-02-15 118 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