【发布时间】:2015-05-05 09:51:42
【问题描述】:
我的官方食谱有语法错误。当我试图从一个流浪的盒子里运行这个食谱时,它工作得很好。我用过:
chef-client --local-mode --runlist [...]
现在我正在尝试使用 chef-solo 来配置盒子,因为 chef-client 需要服务器和密钥。应该是等价的。
这是我的 Vagrantfile,我有两台机器,每台机器都由一些厨师食谱提供。我还将 ssh 设置为 X 模式、用于名称解析的 DNS 重定向、分配给每台机器的内存以及共享文件夹。
如果我添加到运行列表 recipe1、recipy2 或什至在运行列表中没有任何 recipy,则会出现错误。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "hashicorp/precise64"
# Needs vagrant 1.7.2 or newer
# chef.install = true
# chef.version = "latest"
# ---- BEGIN MOST RELEVANT PART ----
config.vm.define "mybox" do |a|
a.vm.network "private_network", ip: "192.168.33.12"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "myproject-cookbook/cookbooks"
#chef.add_recipe "myproject::recipe1"
#chef.add_recipe "myproject::recipe2"
#chef.add_recipe "myproject::recipe3"
end
end
# ---- END MOST RELEVANT PART ----
config.vm.define "myotherbox" do |c|
c.vm.network "private_network", ip: "192.168.33.11"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "myproject-cookbook/cookbooks"
chef.add_recipe "myproject::recipe4"
end
end
config.ssh.forward_x11 = true
config.vm.provider :virtualbox do |vb|
# DNS queries to the host, which becomes a DNS Proxy
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
# Lease more RAM to the guest
vb.customize ["modifyvm", :id, "--memory", "2048"]
end
config.vm.synced_folder "../shared", "/home/vagrant/public"
end
实际错误来自官方菜谱 windows,如果我没有指定要运行的单个菜谱,我不知道为什么厨师会运行它。
$ vagrant provision
==> mybox: Running provisioner: chef_solo...
Generating chef JSON and uploading...
==> mybox: Warning: Chef run list is empty. This may not be what you want.
==> mybox: Running chef-solo...
==> mybox: stdin: is not a tty
==> mybox: [2015-03-04T11:08:09+00:00] INFO: *** Chef 10.14.2 ***
==> mybox: [2015-03-04T11:08:11+00:00] INFO: Run List is []
==> mybox: [2015-03-04T11:08:11+00:00] INFO: Run List expands to []
==> mybox: [2015-03-04T11:08:11+00:00] INFO: Starting Chef Run for precise64
==> mybox: [2015-03-04T11:08:11+00:00] INFO: Running start handlers
==> mybox: [2015-03-04T11:08:11+00:00] INFO: Start handlers complete.
==> mybox:
==> mybox: ================================================================================
==> mybox: Recipe Compile Error in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/windows/libraries/windows_package.rb
==> mybox: ================================================================================
==> mybox:
==> mybox: SyntaxError
==> mybox: -----------
==> mybox: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/windows/libraries/windows_package.rb:239: syntax error, unexpected ':', expecting kEND
==> mybox: provides :windows_package, os: "windows"
==> mybox: ^
==> mybox: Cookbook Trace:
==> mybox: ---------------
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:140:in `load'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:140:in `load_libraries'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:230:in `call'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:230:in `foreach_cookbook_load_segment'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:229:in `each'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:229:in `foreach_cookbook_load_segment'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:227:in `each'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:227:in `foreach_cookbook_load_segment'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:137:in `load_libraries'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:62:in `load'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/client.rb:198:in `setup_run_context'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/client.rb:418:in `do_run'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/client.rb:176:in `run'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/application/solo.rb:230:in `run_application'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/application/solo.rb:218:in `loop'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/application/solo.rb:218:in `run_application'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/application.rb:70:in `run'
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/chef-solo:25
==> mybox: /opt/vagrant_ruby/bin/chef-solo:19:in `load'
==> mybox: /opt/vagrant_ruby/bin/chef-solo:19
==> mybox:
==> mybox: Relevant File Content:
==> mybox: ----------------------
==> mybox: /opt/vagrant_ruby/lib/ruby/gems/1.8/gems/chef-10.14.2/bin/../lib/chef/run_context.rb:
==> mybox:
==> mybox: 1: #
==> mybox: 2: # Author:: Adam Jacob (<adam@opscode.com>)
==> mybox: 3: # Author:: Christopher Walters (<cw@opscode.com>)
==> mybox: 4: # Author:: Tim Hinderliter (<tim@opscode.com>)
==> mybox: 5: # Copyright:: Copyright (c) 2008-2010 Opscode, Inc.
==> mybox: 6: # License:: Apache License, Version 2.0
==> mybox: 7: #
==> mybox: 8: # Licensed under the Apache License, Version 2.0 (the "License");
==> mybox: 9: # you may not use this file except in compliance with the License.
==> mybox:
==> mybox: [2015-03-04T11:08:11+00:00] ERROR: Running exception handlers
==> mybox: [2015-03-04T11:08:11+00:00] ERROR: Exception handlers complete
==> mybox: [2015-03-04T11:08:11+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> mybox: [2015-03-04T11:08:11+00:00] FATAL: SyntaxError: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/windows/libraries/windows_package.rb:239: syntax error, unexpected ':', expecting kEND
==> mybox: provides :windows_package, os: "windows"
==> mybox: ^
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.
说我没有编辑这个配方是相关的,它可以很好地与厨师客户端手动执行它而不是从 vagrant 执行,最重要的是,应该执行配方的确切版本的 ruby 在那里说没有语法:
$ /opt/chef/embedded/bin/ruby -c myproject-cookbook/cookbooks/windows/libraries/windows_package.rb
Syntax OK
您可以检查配方失败in github
cookbooks 文件夹中的说明书是:
- 7-zip
- 方舟
- chef_handler
- java
- 行家
- 我的项目
- 窗户
实际问题:
- 为什么要运行这个“windows_package”配方?
- 为什么 chef 会抱怨语法错误而 ruby 本身却不会?
编辑(我几乎没有任何特权): 是的,奇怪的是,在访客“mybox”中,厨师的版本为 10.14.2:
vagrant@precise64:~$ chef-solo -v
Chef: 10.14.2
相反,主机中的 chef-client 是综合安装程序安装的版本...
user@host$ chef-solo -v
Chef: 12.1.0
我以为主机的主厨被复制到来宾,然后在来宾内部运行,我将重新检查配置并尝试使其安装正确的版本。
谢谢!
编辑2: 它实际上是厨师版本。看来主机上不需要事先安装厨师;相反,vagrant 会自行将其安装在客户机上,并选择它喜欢的版本。
在 vagrant 版本 1.7.2 之前,需要安装 vagrant-omnibus 插件才能选择要安装的版本。见how to do it。
从 1.7.2 开始,无需任何插件,使用“安装”和“版本”方法即可完成。文档here。
来源:Mazinlabs blog(日文)
【问题讨论】:
标签: vagrant chef-infra chef-solo