2017-02-15 5 views
0

を使用して文は私が言うことをしようとしているれているシェフのレシピを持っている場合:Rubyで正規表現(シェフのレシピ)

「サーバのホスト名が-1で終わる場合、newrelic-を有効にして開始それ以外の場合は、これらのサービスを無効にしてください。

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 "]'値の例は、どこで一致しないべきですか?デバッグする前に '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

1時間前に作成されたコメントに基づいて回答を作成するのは疑問です。 –

+0

重要なビットは、前に言及しなかった 'hostname'の代わりに' machinename'を使うことでした。 – coderanger