2014-11-04 24 views
3

我有以下廚師配方如何讓移動文件之前廚師等待應用程序部署?

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 /共享/ tomcat的/webapps/system/WEB-INF/application.properties

我認爲這是因爲tomcat沒有部署應用程序,因此運行此語句時文件夾不存在。

我想象在應用程序部署時移動文件是一個正常的過程。我該怎麼做,並保證廚師將等到部署完成?

回答

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'中?這會起作用嗎?這不會導致廚師跑等,但沒有「更新」資源的副作用? – 2014-11-05 01:49:41

+0

如果您是那種關心資源更新計數的人(提示:不要),您可以改用LWRP。 – coderanger 2014-11-05 08:20:00

+0

但是我確實想要替換文件,即使這存在。這是開發人員爲應用程序設置屬性的文件,因此應在每次部署時更新:) – JSBach 2014-11-05 15:06:53

相關問題