Клиент Chef продолжает переустанавливать рецепт - PullRequest
1 голос
/ 29 марта 2012

Я свежее мясо с шеф-поваром.Я использую chef для управления экземпляром 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 Ответ

1 голос
/ 29 марта 2012

Используйте условие only_if или not_if (которые могут быть либо сценариями оболочки, либо произвольными блоками кода ruby), чтобы определить случай, когда работа, выполненная сценарием, уже выполнена.Вы также можете заставить свой скрипт создать файл при успешном выполнении и использовать аргумент creates, чтобы exec запускался, только когда этот файл отсутствует.

Все это описано в документации для exec.ресурс .

...