设置具有Chef角色错误的Vagrant

设置具有Chef角色错误的Vagrant,vagrant,chef-infra,vagrantfile,Vagrant,Chef Infra,Vagrantfile,我对Chef比较陌生,我正在尝试使用Digital Ocean作为提供商,Chef作为供应者来设置一个流浪箱。问题似乎在于角色,但据我所知,他们配合得很好。谢谢 这是我的档案: Vagrant.configure('2') do |config| config.omnibus.chef_version = :latest config.vm.provider :digital_ocean do |provider, override| config.vm.hostname

我对Chef比较陌生,我正在尝试使用Digital Ocean作为提供商,Chef作为供应者来设置一个流浪箱。问题似乎在于角色,但据我所知,他们配合得很好。谢谢

这是我的档案:

Vagrant.configure('2') do |config|


  config.omnibus.chef_version = :latest


  config.vm.provider :digital_ocean do |provider, override|
    config.vm.hostname = 'majestic-chaos-ubuntu14.04x64'
    override.ssh.private_key_path = '~/.ssh/id_rsa'
    override.vm.box = 'digital_ocean'
    provider.token = 'XXXXXXXXXXXX'
    provider.image = 'Ubuntu 14.04 x64'
    provider.region = 'nyc2'
    provider.size = '512mb'
  end

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ['../../cookbooks']
    chef.roles_path = ['../../roles']
    chef.add_role ("majestic-chaos-ubuntu14.04x64")
  end
end
和我的角色文件:

name "majestic-chaos-ubuntu-14.04x64"

ssl_verify_mode :verify_peer

run_list(
  "recipe[apt]",
  "recipe[open-ssl]",
  "recipe[build-essential]",
  "recipe[chef-ruby_build]",
  "recipe[nodejs-cookbook]",
  "recipe[rbenv::user]",
  "recipe[rbenv::vagrant]",
  "recipe[zsh]",
  "recipe[vim]",
  "recipe[imagemagick]",
)

override_attributes(
  rbenv: {
    user_installs: [{
      user: 'vagrant',
      rubies: ["2.1.2"],
      global: "2.1.2",
      gems: {
        "2.1.2" => [
          { name: "bundler" }
        ]
      }
    }]
  }
)
这就是我得到的错误:

[2014-09-18T16:05:48-04:00] INFO: *** Chef 11.16.2 ***
[2014-09-18T16:05:48-04:00] INFO: Chef-client pid: 2934
[2014-09-18T16:05:51-04:00] INFO: Setting the run_list to ["role[majestic-chaos-
ubuntu14.04x64]"] from CLI options
default: [2014-09-18T16:05:51-04:00] ERROR: Role majestic-chaos-ubuntu14.04x64 (included 
by 'top level') is in the runlist but does not exist. Skipping expand.

[2014-09-18T16:05:51-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-   
stacktrace.out
[2014-09-18T16:05:51-04:00] ERROR: The expanded run list includes nonexistent roles: 
majestic-chaos-ubuntu14.04x64
[2014-09-18T16:05:51-04:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process 
exited unsuccessfully (exit code 1)

尝试为角色和食谱使用绝对路径:

chef.cookbooks_path = File.expand_path('../../cookbooks', __FILE__)
chef.roles_path = File.expand_path('../../roles', __FILE__)

我在启动一个流浪者映像时遇到了类似的问题,其中角色文件没有被提取。我找到的解决方案是,对于kitchen.yml文件,角色文件应该是JSON格式的。上面列出的角色文件看起来不像JSON

如本文所述:

roles\u path角色数据所在目录的相对路径。此数据必须定义为JSON

下面是一些将.rb转换为JSON的ruby命令


作为一个副作用,上面的代码将加载一个rb配置,您可以验证它是否正在生成您期望的角色变量。

在Vagrant文件中更改ruby版本!嘿@estebanrules,你找到什么解决方案了吗?即使采用了这种方法,我仍然面临着这个问题。如果问题仍然存在并且没有解决您的问题,为什么会将其标记为正确?是的,我很抱歉,答案不应该标记为正确。厨师长solo供应员的情况并非如此。这对chef_zero和基于chef_zero的东西来说是正确的。那里的文件是根据厨师的培训材料编写的,这些培训材料只涵盖零号厨师。这也是在谈论流浪汉,而不是测试厨房。
require 'chef'
role = Chef::Role.new
role.from_file("./roles/useful_api_role.rb")
puts JSON.pretty_generate(role)