2012-03-28 123 views
1

我是厨师的新鲜肉类。我正在使用厨师来管理ec2实例,似乎正在工作。当我登录盒子时,我运行以下内容,以便看到什么是攻击。厨师客户端不断重新安装食谱

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

使用的only_ifnot_if条件(这可以是shell脚本或Ruby代码的任意块),以确定其中所述脚本所做的工作已经完成的情况下。您还可以让脚本在成功执行时创建文件,并使用creates参数使exec仅在该文件不存在时运行。

所有这些覆盖在documentation for the exec resource