2015-12-10 44 views
0

我在AWS OpsWorks中運行廚師12時遇到問題。在創建服務之前處理廚師模板

基本上,在部署過程中,我的一個Deploy Recipes爲每個部署的應用程序創建一個NGINX-App.conf。這個工作正常。

但是我想要創建並運行此模板只有當NGINX安裝在服務器上,因爲我有一個沒有放置webserver/nginx的實例。

我run_list想這樣的:

  1. Nginx的包,啓用nginx的服務啓動。
  2. 部署期間創建Nginx-app特定的conf文件。

我創建Nginx的應用程序內的conf食譜是這樣的:

template 'nginx.conf' do 
    path "/etc/nginx/conf.d/#{params[:something]}.conf" 
    source 'nginxapp.conf.erb' 
    cookbook 'nginx' 
    owner 'root' 
    group 'root' 
    mode 0644 
    notifies :reload, 'service[nginx]' 
    only_if { File.exists?('/usr/sbin/nginx') } 
    end 

,如果我加入「only_if」的情形,因爲它似乎是這個模板被處理前沒有安裝Nginx的失敗。

如果我第二次運行,它將正常工作,因爲nginx已經安裝。

有人知道這裏可能是錯的嗎?

問候, 安德烈斯

回答

0

因此很明顯,我做它的工作是這樣的:

  1. 移動「模板」部分原「nginx的」煮的定義和左only_if部分存在。
  2. Inside Deploy cookbook/recipe我只是從創建模板的「nginx」cookbook中調用這個自定義定義。

這樣的文件存在和狀況正常工作,我不知道爲什麼...

是否是與使用其他的菜譜模板一切之前被執行?

+0

它與烹飪書無關,更多的是被移植到定義中。我覺得你的run_list並不是按照你認爲的那種順序運行。 – Tensibai

+0

Aight謝謝!然後,它可能看起來像他們的新廚師環境的AWS OpsWorks的錯誤。雖然這很奇怪。如果我的Deploy Cookbook在Nginx安裝之前運行,那麼所有其他命令也會失敗。 – midN

+1

在這種情況下,也許OPSworks廚師版在衛兵上有不同的行爲,聽起來不太可能。注意:嘗試使用'{:: File.exists?'(前置兩個冒號來獲得根文件類)來確保使用Ruby類而不是Chef的類,我認爲有問題但不能完全記住哪裏。 – Tensibai