chef-infra - 如何将 Berkshelf 与 Chef-solo 一起使用?

标签 chef-infra vagrant

我正在尝试与 Berkshelf 一起管理 Recipe 。以下是步骤

$ berks init  # and use a custom Vagrant box image
$ vim Berksfile  # and put cookbook 'git'
$ berks install
$ vagrant up

我希望最后一步使用 git 配置 VM Recipe ,但是我得到:

$ bin/vagrant up
/Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/hashie-2.0.0/lib/hashie/mash.rb:80:警告:重新定义“object_id”可能会导致严重的问题
[默认] 导入基础框 'Ubuntu-11.04'...
[默认] NAT 网络的匹配 MAC 地址...
[默认] 清除任何以前设置的转发端口...
[默认] 转发端口...
[默认] -- 22 => 2222(适配器 1)
[Berkshelf] 安装 Recipe ...
[Berkshelf] 使用 git (2.3.0)
[Berkshelf] 使用 dmg (1.1.0)
[Berkshelf] 使用 build-essential (1.3.4)
[Berkshelf] 使用 yum (2.1.0)
[Berkshelf] 使用 windows (1.8.4)
[Berkshelf] 使用 chef_handler (1.1.4)
[Berkshelf] 使用 runit (1.0.6)
[默认] 创建共享文件夹元数据...
[默认] 清除任何以前设置的网络接口(interface)...
[默认] 根据配置准备网络接口(interface)...
[默认] 正在启动虚拟机...
[默认] 等待虚拟机启动。这可能需要几分钟。
[默认] VM 已启动并可以使用!
[默认] 配置和启用网络接口(interface)...
[默认] 设置主机名...
[默认] 正在装载共享文件夹...
[默认] -- v-root:/vagrant
[默认] -- v-csc-1:/tmp/vagrant-chef-1/chef-solo-1/cookbooks
[默认] 运行供应商:Vagrant::Provisioners::ChefSolo...
[默认] 生成 Chef JSON 并上传...
[默认] 运行 Chef 独奏...
标准输入:不是 tty
[2013-02-24T12:51:04+00:00] 信息:*** Chef 10.18.2 ***
[2013-02-24T12:51:05+00:00] 信息:从 JSON 将 run_list 设置为 ["recipe[berkshelf-test::default]"]
[2013-02-24T12:51:05+00:00] 信息:运行列表是 [recipe [berkshelf-test::default]]
[2013-02-24T12:51:05+00:00] 信息:运行列表扩展为 [berkshelf-test::default]
[2013-02-24T12:51:05+00:00] 信息:为 ubuntu-11.04 启动 Chef Run
[2013-02-24T12:51:05+00:00] 信息:运行启动处理程序
[2013-02-24T12:51:05+00:00] 信息:启动处理程序完成。
[2013-02-24T12:51:05+00:00] 错误:运行异常处理程序
[2013-02-24T12:51:05+00:00] 错误:异常处理程序完成
[2013-02-24T12:51:05+00:00] 致命:Stacktrace 转储到/tmp/vagrant-chef-1/chef-stacktrace.out
[2013-02-24T12:51:05+00:00] 致命:Chef::Exceptions::CookbookNotFound:Cookbook berkshelf-test 未找到。如果您从另一本 Recipe 加载 berkshelf-test,请确保在元数据中配置依赖项
Chef 从未成功完成!任何错误都应该在
上面的输出。请修复您的 Recipe ,以便它们正确完成。

Vagrantfile 中的 chef-solo 部分:

config.vm.provision :chef_solo 做 |chef|
Chef .json = {
:mysql => {
:server_root_password => 'rootpass',
:server_debian_password => 'debpass',
:server_repl_password => 'replpass'
}
}

chef.run_list = [
“配方 [berkshelf-test::default]”
]
结尾

最佳答案

在这种情况下,问题在于 chef.run_list在您的 Vagrantfile 中 - 它指示 Chef 从“berkshelf-test” Recipe 中加载“默认” Recipe 。如果您使用 git Recipe 进行测试,您可能需要 "recipe[git::default]"反而。

您可能还需要添加 require 'berkshelf/vagrant'到你的 Vagrantfile 的顶部。请参阅 the Berkshelf homepage 上的“Vagrant With Berkshelf”部分更多解释。

关于chef-infra - 如何将 Berkshelf 与 Chef-solo 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15051938/

相关文章:

ruby - 如何更改 Vagrant (VDD) VM 的 php 和 xdebug 版本?

ruby /Chef : is there a way to refer to the resource 'name' and pass to a function?

Vagrantfile:为一个提供者禁用同步文件夹,但不为另一个提供者禁用同步文件夹

vagrant 添加接口(interface)而不设置 IP 地址

ruby - Vagrant with Chef - 配置 VM 时出错

windows - 我可以将 knife.rb 作为参数传递给 knife 命令吗?

windows - 在资源 `create` 上执行操作 'directory[C:/topdir/subdir]' 时出错

ruby - 如何使用 Ruby 模板化 Vagrantfile?

wordpress - 本地主机 Wordpress 慢

node.js - Laravel Homestead NPM 安装 Gulp 不行