2013-10-26 3 views
5

Я последовал за учебник http://gettingstartedwithchef.com/, глава 1.повар делает исполнения ордеров не последовательный рецепт

Мой список пробег

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

Мой рецепт phpap поваренной книги

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" 

зависимостями моей кулинарной книги

по умолчанию
depends "apache2" 
depends "mysql" 
depends "php" 
depends "database" 

Мой репо имеет следующие скачано поваренные

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

Я использую шеф-соло. У моего хоста устаревшая информация о репо. Старый apt repo не должен быть проблемой, потому что первый рецепт в моем списке запуска обновляет его. Но шеф-повар игнорирует рецепт apt и начинается с mysql one.

См войти

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

Хост работает убунту 12,04. Я попытался поместить свои собственные рецепты перед phpap в список запуска, но без каких-либо успехов.

Я могу обойти это с ручным размещением apt-get update в скрипте bash прямо перед поваром-соло.

Является ли это mysql cookbook настолько плохим? Насколько я знаю, шеф-повар ВСЕГДА следует за проездом вперед.

+0

Вы проверили, существует ли этот файл: '/ var/lib/apt/периодический/update-success-stamp'? команда 'apt-get update' не будет выполнена, если этот файл существует. – shawnzhu

+0

apt-get - пример. Я попробовал свои собственные рецепты ручной работы, которые просто печатали мир привет с тем же результатом. –

ответ

1

Я получил рецепт phpap без сбоев на голом ubuntu 12.04 (без предварительного обновления вручную) со следующим исправлением.

Я удалил рецепты «build-essential» и «openssl» из phpap. После этого шеф-повар выполняет рецепты, как ожидалось.

Но странное поведение оставалось необъяснимым.

7

Вообще шеф-повар всегда будет чествовать список работ. Однако иногда вам может понадобиться запустить ресурс перед любыми другими (например, настроить диспетчер пакетов, apt/yum/etc). То, что, похоже, происходит в рецепте ruby ​​mysql, состоит в том, что в рецепте явно выполняются некоторые установки пакетов во время компиляции (прежде чем шеф-повар начал выполнять ресурсы). Они терпят неудачу, поскольку рецепт apt еще не запущен (ни у кого нет).

Существует хорошее сообщение opscode, объясняющее фазы компиляции/выполнения here.

Нарушитель код в MySQL :: рубин

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

run_action(:install) говорит повару, чтобы запустить это сейчас (во время компиляции).

+0

У меня была ссылка на статью wiki о документации разницы между этапами компиляции и выполнения рецептов шеф-повара, но теперь она составляет 404 дюйма. Я попытаюсь опубликовать его, если у меня когда-нибудь появится рабочий url ... –

+0

Проклятая вещь: ссылка не работает без параметра jsessionid ... (взято прямо из результата поиска Google) https: //wiki.opscode. com/display/chef/Evaluate + и + Run + Resources + at + Compile + Time; jsessionid = BBE750D0DC249823649B3F4F70F24C82 –

+0

Эта ссылка уже была в сообщении, помещена в разрыв строки, чтобы сделать его более очевидным. Спасибо хоть. –

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