2012-11-12 169 views
1

我一直在尝试使用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一起使用了同样的食谱&资源,没有遇到任何问题,所以我很困惑。这既是为什么它试图编译我甚至没有用过的食谱,也不知道为什么它无法编译自定义资源。

我使用的是 “流浪1.0.5”, 上 “的Mac OS X 10.8”, 用 “的VirtualBox 4.2.4”, 这个流浪汉构建使用 “厨师独奏10.14.2”

回答

3

如果你从vagrantbox.es下载了你的Vagrant盒子,我确信你已经安装了ruby 1.8.x,因为它们必须同时支持厨师和木偶。不幸的是,puppet 1.9.x并不适合。

同时红宝石1.9引入了新的哈希语法是:

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

但是Ruby 1.8.x的不支持。使用旧的哈希语法

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

或通过安装红宝石1.9 :)

+0

哦,让这么多的意义创建自己的流浪者中,谢客 –

+1

另外,Opscode公司发布大厨从“总括安装基础箱“安装程序(包括他们自己的Ruby 1.9.3)在我们的”Bento“项目之外:https://github.com/opscode/bento - 自述文件有链接到下载的baseboxes。 – jtimberman