2013-10-26 20 views
5

Ho seguito esercitazione http://gettingstartedwithchef.com/, capitolo 1.Chef fa esecuzione delle ricette non sequenziale

Il mio elenco di esecuzione è

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

mia ricetta di default di phpap libro di cucina

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" 

Dipendenze della mia libro di cucina

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

mio repo ha seguito scaricato libri di cucina

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

io uso lo chef-solo. Il mio host ha aggiornato le informazioni sul repository apt. Il vecchio repository apt non dovrebbe essere un problema perché la prima ricetta nella mia lista di esecuzione lo aggiorna. Ma lo chef ignora la ricetta giusta e parte da mysql.

Vedi accedere

[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) 

L'host gestisce Ubuntu 12.04. Ho provato a inserire le mie ricette prima di phpap nella lista di esecuzione, ma senza alcun successo.

Posso aggirare questo problema con l'inserimento manuale apt-get in bash script subito prima di chef-solo.

È un libro di cucina di mysql così male? Per quanto ne so, lo chef segue SEMPRE la lista da seguire.

+0

hai verificato se questo file esiste: '/ var/lib/apt/periodic/update-success-stamp'? il comando 'apt-get update' non verrà eseguito se questo file esiste. – shawnzhu

+0

apt-get è solo un esempio. Ho provato le mie ricette fatte a mano facendo solo stampa hello mondo con lo stesso risultato. –

risposta

1

Ho ottenuto la ricetta phpap senza errori su Ubuntu 12.04 (senza alcun pre-aggiornamento manuale) con la seguente correzione.

Ho rimosso le ricette "build-essential" e "openssl" da phpap one. Dopo questo cambio lo chef esegue le ricette come previsto.

Ma strano comportamento lasciato inspiegabile.

7

In generale lo chef rispetta sempre l'elenco delle corse. Tuttavia a volte potresti voler eseguire una risorsa prima di ogni altra (come configurare un gestore di pacchetti, apt/yum/etc). Quello che sembra accadere nella ricetta di mysql ruby ​​è che la ricetta esegue esplicitamente alcune installazioni di pacchetti in fase di compilazione (prima che lo chef abbia iniziato a eseguire risorse). Falliscono perché la ricetta di apt non è ancora stata eseguita (nessuno ne ha).

C'è un buon post opscode che spiega le fasi di compilazione/esecuzione here.

Il codice incriminato in MySQL :: Ruby è

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

Il run_action(:install) sta dicendo chef per eseguire questo ora (al momento della compilazione).

+0

Ho avuto un collegamento a un articolo wiki sulla documentazione della differenza tra le fasi di compilazione ed esecuzione delle ricette dello chef, ma ora è 404'ing. Proverò a postarlo se mai avrò un URL funzionante ... –

+0

La cosa più dannata: il link non funziona senza il parametro jsessionid ... (preso direttamente da un risultato di ricerca di google) https: //wiki.opscode. com/display/chef/Valuta + e + Esegui + Risorse + a + Compila + Ora; jsessionid = BBE750D0DC249823649B3F4F70F24C82 –

+0

Quel collegamento era già nel post, inserito in un'interruzione di riga per renderlo un po 'più ovvio. Grazie comunque. –

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