流浪者&自定义厨师资源

时间:2012-11-12 16:46:27

标签: ruby chef vagrant

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

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

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的资源并没有遇到任何问题,所以我很困惑。两者都是为什么它试图编译我甚至不使用的食谱,以及为什么它无法编译自定义资源。

我正在使用“Vagrant 1.0.5”, 在“Mac OS X 10.8”上, 使用“VirtualBox 4.2.4”, 而这个Vagrant版本正在使用“Chef-Solo 10.14.2”

1 个答案:

答案 0 :(得分:3)

如果你从vagrantbox.es下载了你的Vagrant盒子,我很确定你在那里安装了ruby 1.8.x,因为它们必须支持厨师和木偶。不幸的是,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创建自己的流浪盒:)