Chef执行非顺序配方执行

时间:2013-10-26 21:26:44

标签: ruby gem chef cookbook

我遵循了教程http://gettingstartedwithchef.com/,第1章。

我的运行列表是

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

我的phpap cookbook的默认配方

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

我使用厨师独奏。我的主人已经过时了回购信息。 Old apt repo应该不是问题,因为我的运行列表中的第一个配方 更新它。但是厨师忽略了apt配方并从mysql开始。

参见日志

dan@mywp3:~/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)

主机运行ubuntu 12.04。 我试图在运行列表中将自己的食谱放在phpap之前,但没有任何成功。

我可以在主厨独奏之前手动在bash脚本中放置apt-get update来解决这个问题。

mysql cookbook这么糟糕吗?据我所知,厨师总是沿着奔跑的海峡前进。

3 个答案:

答案 0 :(得分:7)

一般来说,大厨将始终遵守运行列表。但是,有时您可能希望在任何其他资源之前运行资源(比如配置包管理器,apt / yum / etc)。 mysql ruby​​配方中似乎发生的事情是配方在编译时显式运行一些软件包安装(在厨师开始执行资源之前)。它们失败了,因为apt配方还没有运行(没有)。

有一个很好的opscode帖子解释编译/执行阶段here

mysql :: ruby​​中的违规代码是

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

run_action(:install)告诉大厨现在运行它(在编译时)。

答案 1 :(得分:1)

我在裸ubuntu 12.04(没有任何手动预更新)上获得了phpap配方而没有失败,并进行了以下修复。

我从phpap中删除了“build-essential”和“openssl”的食谱。 在那之后,厨师按照预期执行食谱。

但奇怪的行为无法解释。

答案 2 :(得分:0)

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