【问题标题】:Syntax error on a Chef official recipe, provisioning Vagrant厨师官方食谱上的语法错误,配置 Vagrant
【发布时间】: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
  • 行家
  • 我的项目
  • 窗户

实际问题:

  1. 为什么要运行这个“windows_package”配方?
  2. 为什么 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


    【解决方案1】:

    我很确定这与盒子上安装的厨师版本有关:

    ==> mybox: [2015-03-04T11:08:09+00:00] INFO: *** Chef 10.14.2 ***
    

    我不能确定,但​​我敢打赌,当您从 ssh 尝试时,您使用的是不同的厨师版本。无论如何,10.14.2 已经很老了,你会在最近的食谱中遇到错误。

    IIRC 有一个 vagrant 插件可以安装/更新 chef (vagrant-omnibus ?)

    【讨论】:

    • 其实 vagrant 安装它有没有这个插件。该插件用于选择您喜欢的版本。然而,vagrant 最近实现了这个功能。请参阅我的问题中的“EDIT2”。谢谢天丝白!
    • 不客气,很高兴它帮助整理了它。 (我正在使用预装厨师的家庭烘焙源图像,所以我并没有真正挖掘厨师安装与流浪汉的关系:p)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多