2016-11-09 7 views
2

私はシェフのレシピを書いていますが、これではサービスが動作していない場合にのみ操作(バッチ実行)を実行する必要があります。 私はこのスニペットを使用:Windowsサービスが稼働している場合、シェフにガードを使用することはできますか?

batch 'run commnad' do 
    cwd target_path + '/bin/win64' 
    code 'command to be executed' 
    not_if '::Win32::Service.exists?("Service name")' 
end 

をしかし、動作しているようですしません。 this質問を見た後にif節私の代わりに、ガードの使用してプロセスを変更し、それが正常に動作します:

if !::Win32::Service.exists?("Service name") then 
    batch 'Install zabbix agent' do 
    cwd target_path + '/bin/win64' 
    code 'command to be executed' 
    end 
end 

しかし、これは、私が理解し何のために、これを管理するための正しい方法ではありませんので、私は不思議なこと:警備員がなぜ適切に機能していないのですか?

ありがとう、 Michele。

答えて

3

not_ifステートメントを書き込んだ方法は、コマンドをシェルスクリプトとして実行します。 シェルはRubyコードを知らないので、コマンド全体が失敗します。あなたの代わりにブロック内に置く必要があるRubyコードでnot_ifを使用するためには

not_if { Win32::Service.exists?("Service name") } 

はここにいくつかのより多くの例を参照してください(ページnot_ifを検索):
https://docs.chef.io/resource_common.html

+0

{ } 問題を解決しました。私はそれについて考えなかった。ありがとう! – Mikyjpeg

+0

さらにRuby-ishを実行したい場合は、バッチリソースコールに条件付きを追加することもできます。すなわち、 'バッチ '実行コマンドdo ... JackChance

関連する問題