2012-03-28 14 views
1

私はシェフと新鮮な肉です。私はec2インスタンスを管理するためにシェフを使用しています。ansは動作しているようです。私がボックスにログインすると、私は次のことを実行して、何が見えているかを見ることができます。シェフのクライアントはレシピを再インストールし続けます

sudo chef-client -i 60 

pytimerのインストールが引き続き再インストールされていることがわかりました。レシピが変更されない限り、レシピが一度しかインストールされないようにレシピを変更するにはどうすればよいですか?

[Thu, 29 Mar 2012 00:28:01 +0000] INFO: Processing easy_install_package[hash_ring] action install (nginx_base::default line 107) 
[Thu, 29 Mar 2012 00:28:02 +0000] INFO: Processing bash[compile_proto_source_source] action run (PyTimer::default line 8) 
[Thu, 29 Mar 2012 00:28:02 +0000] INFO: bash[compile_proto_source_source] sh("bash" "/tmp/chef-script20120329-23998-1te88gz-0") 
timeout-0.1.2/ 
timeout-0.1.2/PKG-INFO 
timeout-0.1.2/setup.py 
timeout-0.1.2/timeout.py 
running install 
running build 
running build_py 
copying timeout.py -> build/lib.linux-x86_64-2.7 
running install_lib 
copying build/lib.linux-x86_64-2.7/timeout.py -> /usr/local/lib/python2.7/dist-packages 
byte-compiling /usr/local/lib/python2.7/dist-packages/timeout.py to timeout.pyc 
running install_egg_info 
Removing /usr/local/lib/python2.7/dist-packages/timeout-0.1.2.egg-info 
Writing /usr/local/lib/python2.7/dist-packages/timeout-0.1.2.egg-info 




version = node[:PyTimer][:version] 

remote_file "#{Chef::Config[:file_cache_path]}/timeout-#{version}.tar.gz" do 
    source "http://pypi.python.org/packages/source/t/timeout/timeout-#{version}.tar.gz" 
    #action :create_if_missing 
end 

bash "compile_proto_source_source" do 
    cwd Chef::Config[:file_cache_path] 
    code <<-EOH 
    tar -xvf timeout-#{version}.tar.gz 
    cd timeout-#{version} 
    sed 's/signal.alarm(self.timeout)/signal.setitimer(signal.ITIMER_REAL,self.timeout)/g' -i timeout.py 
    python setup install 
    EOH 
end 

答えて

1

は、スクリプトによって行われた仕事が既に達成されている場合を識別するために、(シェルスクリプトまたはRubyコードの任意のブロックのいずれかであり得る)only_if又はnot_if条件を使用します。また、スクリプトが正常に実行されたときにファイルを作成させ、そのファイルが存在しない場合にのみ実行するためにcreates引数をexecに使用することもできます。

これらはすべてdocumentation for the exec resourceでカバーされています。

関連する問題