为什么Chef_GEM食谱从Chef-Solo而不是通过Vagrant起作用



资源 chef_gem chef-solo一起使用,但与vagrant up

不使用

myApp/vagrantfile

Vagrant.configure("2") do |config|
  config.vm.hostname = "my-hostname"
  config.vm.box = "ubn1204-chef-gemsources-i386"
  config.vm.network :private_network, ip: "33.33.33.10"
  config.vm.boot_timeout = 120
  config.berkshelf.enabled = true
  config.vm.provision :chef_solo do |chef|
    chef.json = {
      :mysql => {
        :server_root_password => 'rootpass',
        :server_debian_password => 'debpass',
        :server_repl_password => 'replpass'
      }
    }
    chef.run_list = [
      "recipe[myface::mysql_gem]"
    ]
  end
end

*myapp/coppes/mysql_gem.rb*

%w{mysql-client libmysqlclient-dev make}.each do |pack|
  package pack do
    action :nothing
  end.run_action(:install)
end
g = chef_gem "mysql" do
  action :nothing
end
g.run_action(:install)

执行vagrant up时,我会得到以下错误

[2014-01-22T15:21:06+00:00] INFO: Forking chef instance to converge...
[2014-01-22T15:21:07+00:00] INFO: *** Chef 11.8.2 ***
[2014-01-22T15:21:07+00:00] INFO: Chef-client pid: 1162
[2014-01-22T15:21:09+00:00] INFO: Setting the run_list to ["recipe[myface::mysql_gem]"] from JSON
[2014-01-22T15:21:09+00:00] INFO: Run List is [recipe[myface::mysql_gem]]
[2014-01-22T15:21:09+00:00] INFO: Run List expands to [myface::mysql_gem]
[2014-01-22T15:21:09+00:00] INFO: Starting Chef Run for myface-berkshelf
[2014-01-22T15:21:09+00:00] INFO: Running start handlers
[2014-01-22T15:21:09+00:00] INFO: Start handlers complete.
[2014-01-22T15:22:54+00:00] WARN:  failed to find gem mysql (>= 0) from [http://rubygems.org/]
[2014-01-22T15:22:54+00:00] ERROR: Running exception handlers
[2014-01-22T15:22:54+00:00] ERROR: Exception handlers complete
[2014-01-22T15:22:54+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2014-01-22T15:22:54+00:00] ERROR: chef_gem[mysql] (myface::mysql_gem line 6) had an error: ArgumentError: Illformed requirement [""]
================================================================================
Error executing action `install` on resource 'chef_gem[mysql]'
================================================================================

ArgumentError
-------------
Illformed requirement [""]

Cookbook Trace:
---------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb:9:in `from_file'

Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb
  6: g = chef_gem "mysql" do
  7:   action :nothing
  8: end
  9: g.run_action(:install)

Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb:6:in `from_file'
chef_gem("mysql") do
  provider Chef::Provider::Package::Rubygems
  action [:nothing]
  retries 0
  retry_delay 2
  package_name "mysql"
  cookbook_name :myface
  recipe_name "mysql_gem"
end


================================================================================
Recipe Compile Error in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb
================================================================================

ArgumentError
-------------
chef_gem[mysql] (myface::mysql_gem line 6) had an error: ArgumentError: Illformed requirement [""]

Cookbook Trace:
---------------
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb:9:in `from_file'

Relevant File Content:
----------------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/myface/recipes/mysql_gem.rb:
  2:    package pack do
  3:      action :nothing
  4:    end.run_action(:install)
  5:  end
  6:  g = chef_gem "mysql" do
  7:    action :nothing
  8:  end
  9>> g.run_action(:install) 10:  

[2014-01-22T15:21:06+00:00] INFO: Forking chef instance to converge...
[2014-01-22T15:22:54+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

但是,我进入了Vagrant VM vagrant ssh

执行Vagrant $ sudo chef-solo -c /vagrant/solo.rb -j /vagrant/aux.rb 它可以正常工作。

/vagrant/aux.rb

{
    "mysql": {
    "server_root_password": "rootpass",
    "server_debian_password": "debpass",
    "server_repl_password": "replpass"
},
    "run_list": [ "recipe[myface::mysql_gem]" ]
}

/vagrant/solo.rb

file_cache_path    "/var/chef/cache"
file_backup_path   "/var/chef/backup"
cookbook_path ["/tmp/vagrant-chef-1/chef-solo-1/cookbooks"]
log_level :info
verbose_logging    true
encrypted_data_bag_secret "/tmp/encrypted_data_bag_secret"

有人知道为什么直接从 Chef-Solo 而不是通过 vagrant

工具版本

  • Ruby 1.9.3p392
  • VirtualBox 4.3.6
  • 厨师:11.8.2
  • Vagrant 1.3.5插件
  • vagrant-berkshelf(1.3.7)
  • vagrantbox ubuntu 12.04

这是一个知道的厨师错误-Chef -3912

最新更新