设置具有Chef角色错误的Vagrant
我对Chef比较陌生,我正在尝试使用Digital Ocean作为提供商,Chef作为供应者来设置一个流浪箱。问题似乎在于角色,但据我所知,他们配合得很好。谢谢 这是我的档案:设置具有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
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)