1

我一直在尝试使用 Vagrant 测试我的一些食谱。我已经能够毫无问题地设置我的 Vagrant 盒子,但是每次我尝试配置(或vagrant up使用 Vagrantfile 中指定的食谱目录)时它都会失败。

出于某种原因,它似乎正在尝试编译目录中的每本食谱(无论它是否在运行列表中使用)并且它对我的自定义资源不满意。他们每个人都因相同的错误而失败:

SyntaxError
-----------
compile error
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/expect/resources/script.rb:5: syntax error, unexpected ':', expecting $end
attribute :script, kind_of: String, required: true
                           ^

它在此示例中抱怨的自定义资源是:

actions :create

default_action :create

attribute :script, kind_of: String, required: true

我的 Vagrantfile 的相关部分是:

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "/Users/0x783czar/Development/Work/Chef-Repos/chef2/cookbooks"
  chef.roles_path = "/Users/0x783czar/Development/Work/Chef-Repos/chef2/roles"
  chef.data_bags_path = "/Users/0x783czar/Development/Work/Chef-Repos/chef2/data_bags"
  chef.add_recipe "build-essential"
  chef.add_recipe "mongodb"

  # You may also specify custom JSON attributes:
  # chef.json = { :mysql_password => "foo" }
end

我在 Chef-Solo 中使用了同样的食谱和资源,没有遇到任何问题,所以我很困惑。既是为什么它试图编译我什至没有使用的食谱,也是为什么它无法编译自定义资源。

我在“Mac OS X 10.8”上使用“Vagrant 1.0.5”和“VirtualBox 4.2.4”,而这个 Vagrant 构建使用的是“Chef-Solo 10.14.2”

4

1 回答 1

3

如果你从 vagrantbox.es 下载了你的 Vagrant box,我很确定你已经安装了 ruby​​ 1.8.x,因为它们必须同时支持 chef 和 puppet。不幸的是,puppet 不适用于 ruby​​ 1.9.x。

同时 ruby​​ 在 1.9 中引入了新的哈希语法,即:

{ key1: value, key2: value ... } compared to old:
{ :key1 => value, :key2 => value ... }

但是 ruby​​ 1.8.x 不支持这一点。使用旧的哈希语法

attribute :script, :kind_of => String, :required => true

或者创建您自己的安装了 ruby​​ 1.9 的 vagrant box :)

于 2012-11-12T22:06:55.600 回答