2014-11-04 1 views
3

У меня есть следующий рецепт шеф-повараКак заставить Chef ждать развертывания приложения перед перемещением файлов?

aws_s3_file "/usr/share/tomcat/webapps/system.war" do 
    bucket "mybucket" 
    remote_path "builds/system_latest.war" 
    aws_access_key_id node[:aws_access_key_id] 
    aws_secret_access_key node[:aws_secret_access_key] 
end 

service "tomcat" do 
    action [:restart] 
end 

aws_s3_file "/usr/share/tomcat/webapps/system/WEB-INF/application.properties" do 
    bucket "mybucket" 
    remote_path "config/application.properties" 
    aws_access_key_id node[:aws_access_key_id] 
    aws_secret_access_key node[:aws_secret_access_key] 
end 

Он отлично работает каждый раз, когда я запускаю его, за исключением того, если машина свежая один.

Когда это свежая машина, я получаю:

Errno :: ENOENT ------------- Нет такого файла или каталога -/USR/доли/кота /webapps/system/WEB-INF/application.properties

Я думаю, что это происходит потому, что кот не выполняется развертывание приложения, поэтому папка не существует, когда выполняется это утверждение.

Я полагаю, что перемещение файлов вокруг приложения при развертывании является обычной процедурой. Как я могу это сделать и гарантировать, что шеф будет ждать, пока развертывание не будет завершено?

ответ

3

Напишите код (возможно, в Ruby или Bash), чтобы запросить, если Tomcat сделан, когда он помещается в цикл while.

ruby_block 'wait for tomcat' do 
    block do 
    true until ::File.exists?('/usr/share/tomcat/webapps/system/WEB-INF') 
    end 
end 
+0

Это приведет к тому, что ресурс, который будет «обновлен» для каждого шеф-повара, не так ли? Наверное, несчастливое, но необходимое зло. Просто мысль, но что бы вы подумали о том, чтобы поставить такой цикл в 'only_if' или' not_if' для существующего ресурса? Будет ли это работать? И разве это не заставит шеф-повара ждать, но без побочного эффекта «обновленного» ресурса? –

+0

Если вы такой человек, который заботится о подсчете обновлений ресурсов (подсказка: не надо), вы можете использовать LWRP. – coderanger

+0

Но я хочу заменить файл, даже если он существует. Это файл, в котором разработчики устанавливают свойства для приложения, поэтому его необходимо обновлять при каждом развертывании :) – JSBach