2013-10-26 6 views
5

I Tutorial gefolgt http://gettingstartedwithchef.com/, Kapitel 1.Chef tut nicht sequenzielles Rezept Ausführung

Meine Laufliste ist

"run_list": [ "recipe[apt]", "recipe[phpap]" ] 

Mein Standardrezept von phpap Kochbuch

include_recipe "apache2" 
include_recipe "build-essential" 
include_recipe "openssl" 
include_recipe "mysql::client" 
include_recipe "mysql::server" 
include_recipe "php" 
include_recipe "php::module_mysql" 
include_recipe "apache2::mod_php5"  
include_recipe "mysql::ruby" 

Abhängigkeiten von meinem Kochbuch

depends "apache2" 
depends "mysql" 
depends "php" 
depends "database" 

Mein Repo hat Kochbücher Folgendes heruntergeladen

apache2 aws    database openssl phpap xml 
apt  build-essential   mysql php  postgresql xfs 

Ich benutze Koch-Solo. Mein Gastgeber hat veraltete Apt-Repo-Informationen. Old Apt Repo sollte kein Problem sein, weil das erste Rezept in meiner Laufliste es aktualisiert. Aber Koch ignoriert apt Rezept und beginnt mit mysql eins. Siehe

log

[email protected]:~/chef-repo$ sudo chef-solo -c solo.rb -j web.json 
Starting Chef Client, version 11.6.2 
Compiling Cookbooks... 
[2013-10-27T00:59:28+04:00] WARN: Cloning resource attributes for service[apache2] from prior resource (CHEF-3694) 
[2013-10-27T00:59:28+04:00] WARN: Previous service[apache2]: /home/dan/chef-repo/cookbooks/apache2/recipes/default.rb:24:in `from_file' 
[2013-10-27T00:59:28+04:00] WARN: Current service[apache2]: /home/dan/chef-repo/cookbooks/apache2/recipes/default.rb:210:in `from_file' 
[2013-10-27T00:59:28+04:00] WARN: Cloning resource attributes for directory[/var/cache/local/preseeding] from prior resource (CHEF-3694) 
[2013-10-27T00:59:28+04:00] WARN: Previous directory[/var/cache/local/preseeding]: /home/dan/chef-repo/cookbooks/apt/recipes/default.rb:76:in `block in from_file' 
[2013-10-27T00:59:28+04:00] WARN: Current directory[/var/cache/local/preseeding]: /home/dan/chef-repo/cookbooks/mysql/recipes/server.rb:44:in `from_file' 
[2013-10-27T00:59:28+04:00] WARN: Cloning resource attributes for directory[/var/lib/mysql] from prior resource (CHEF-3694) 
[2013-10-27T00:59:28+04:00] WARN: Previous directory[/var/lib/mysql]: /home/dan/chef-repo/cookbooks/mysql/recipes/server.rb:117:in `block in from_file' 
[2013-10-27T00:59:28+04:00] WARN: Current directory[/var/lib/mysql]: /home/dan/chef-repo/cookbooks/mysql/recipes/server.rb:117:in `block in from_file' 
[2013-10-27T00:59:28+04:00] WARN: Cloning resource attributes for template[/etc/mysql/my.cnf] from prior resource (CHEF-3694) 
[2013-10-27T00:59:28+04:00] WARN: Previous template[/etc/mysql/my.cnf]: /home/dan/chef-repo/cookbooks/mysql/recipes/server.rb:134:in `from_file' 
[2013-10-27T00:59:28+04:00] WARN: Current template[/etc/mysql/my.cnf]: /home/dan/chef-repo/cookbooks/mysql/recipes/server.rb:194:in `from_file' 
Recipe: mysql::client 
    * package[mysql-client] action install 
================================================================================ 
Error executing action `install` on resource 'package[mysql-client]' 
================================================================================ 


Chef::Exceptions::Exec 
---------------------- 
apt-get -q -y install mysql-client=5.5.32-0ubuntu0.12.04.1 returned 100, expected 0 


Cookbook Trace: 
--------------- 
/home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:44:in `block in from_file' 
/home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:43:in `each' 
/home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:43:in `from_file' 
/home/dan/chef-repo/cookbooks/phpap/recipes/default.rb:20:in `from_file' 


Resource Declaration: 
--------------------- 
# In /home/dan/chef-repo/cookbooks/mysql/recipes/client.rb 

46: package name 
47: end 



Compiled Resource: 
------------------ 
# Declared in /home/dan/chef-repo/cookbooks/mysql/recipes/client.rb:46:in `block in from_file' 

package("mysql-client") do 
    action :install 
    retries 0 
    retry_delay 2 
    package_name "mysql-client" 
    version "5.5.32-0ubuntu0.12.04.1" 
    cookbook_name :mysql 
    recipe_name "client" 
end 




================================================================================ 
Recipe Compile Error in /home/dan/chef-repo/cookbooks/phpap/recipes/default.rb 
================================================================================ 


Chef::Exceptions::Exec 
---------------------- 
package[mysql-client] (mysql::client line 46) had an error: Chef::Exceptions::Exec: apt-get -q -y install mysql-client=5.5.32-0ubuntu0.12.04.1 returned 100, expected 0 


Cookbook Trace: 
--------------- 
    /home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:44:in `block in from_file' 
    /home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:43:in `each' 
    /home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb:43:in `from_file' 
    /home/dan/chef-repo/cookbooks/phpap/recipes/default.rb:20:in `from_file' 


Relevant File Content: 
---------------------- 
/home/dan/chef-repo/cookbooks/mysql/recipes/ruby.rb: 

37: when 'rhel' 
38:  resources('yum_key[RPM-GPG-KEY-percona]').run_action(:add) 
39:  resources('yum_repository[percona]').run_action(:add) 
40: end 
41: end 
42: 
43: node['mysql']['client']['packages'].each do |name| 
44>> resources("package[#{name}]").run_action(:install) 
45: end 
46: 
47: chef_gem 'mysql' 
48: 


[2013-10-27T00:59:30+04:00] ERROR: Running exception handlers 
[2013-10-27T00:59:30+04:00] ERROR: Exception handlers complete 
[2013-10-27T00:59:30+04:00] FATAL: Stacktrace dumped to /home/dan/chef-solo/chef-stacktrace.out 
Chef Client failed. 0 resources updated 
[2013-10-27T00:59:30+04:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 

Der Host läuft Ubuntu 12.04. Ich habe versucht, meine eigenen Rezepte vor phpap in der Laufliste zu setzen, aber ohne Erfolg.

Ich kann dies umgehen mit manuellen Platzierung Apt-Get-Update in Bash-Skript direkt vor Chef-Solo.

Ist es Mysql Kochbuch so schlecht? Soweit ich weiß, Koch Chef immer folgt Run-List-Straße nach vorne.

+0

Haben Sie überprüft, ob diese Datei existiert: '/ var/lib/apt/periodic/update-suction-stamp'? Der Befehl 'apt-get update' wird nicht ausgeführt, wenn diese Datei existiert. – shawnzhu

+0

apt-get ist nur ein Beispiel. Ich habe meine eigenen handgemachten Rezepte ausprobiert, indem ich nur Hallo Welt mit dem gleichen Ergebnis drucke. –

Antwort

1

Ich habe phpap Rezept ohne Fehler auf nackten Ubuntu 12.04 (ohne manuelle Voraktualisierung) mit folgendem Update.

Ich habe die Rezepte "build-essential" und "openssl" von phpap one entfernt. Nach diesem Wechsel führt Küchenchef Rezepte wie erwartet aus.

Aber seltsam Verhalten blieb unerklärt.

7

Im Allgemeinen Chef wird immer die Laufliste zu ehren. Manchmal möchten Sie jedoch eine Ressource vor allen anderen ausführen (z. B. einen Paketmanager konfigurieren, apt/yum/etc). Was in dem mysql-Ruby-Rezept passiert, ist, dass das Rezept explizit einige Paket-Installationen zur Kompilierungszeit ausführt (bevor der Koch damit begonnen hat, Ressourcen auszuführen). Sie schlagen fehl, da das Apt-Rezept noch nicht ausgeführt wurde (keine).

Es gibt einen guten Opscode-Post, der die Kompilierungs-/Ausführungsphasen here erklärt.

Der Code säumige in mysql :: Rubin ist

node['mysql']['client']['packages'].each do |name| 
    resources("package[#{name}]").run_action(:install) 
end 

Die run_action(:install) Koch sagen, dies jetzt laufen (zum Zeitpunkt der Kompilierung).

+0

Ich hatte einen Link zu einem Wiki-Artikel über die Dokumentation des Unterschieds zwischen Kompilier- und Ausführungsphasen von Chef-Rezepten, aber jetzt ist es 404'ing. Ich werde versuchen, es zu veröffentlichen, wenn ich jemals eine funktionierende URL ... –

+0

Damernste Sache: der Link funktioniert nicht ohne den jsessionid param ... (direkt aus einem Google-Suchergebnis) https: //wiki.opscode. com/display/chef/Evaluieren + und + Run + Ressourcen + bei + Kompilieren + Zeit; jsessionid = BBE750D0DC249823649B3F4F70F24C82 –

+0

Dieser Link war bereits in der Post, in einen Zeilenumbruch gesetzt, um es ein wenig auffälliger zu machen. Trotzdem danke. –

0
vagrant destroy -f && vagrant up // destroy everything and start over => OK