chef-infra - 如何在 Vagrant 中使用新的 opscode 存储库?

标签 chef-infra vagrant

我不久前使用了 Vagrant,并且能够使用以下内容:

config.vm.provision :chef_solo do |chef|
chef.recipe_url = 'https://github.com/opscode/cookbooks/tarball/master'
chef.add_recipe 'nginx'
chef.add_recipe 'mysql'
chef.add_role 'web'

# You may also specify custom JSON attributes:
# chef.json = { :mysql_password => '' }
end

现在它似乎已被弃用。我到底如何使用新的 repo?

最佳答案

首先,我的建议是不要直接从 Git 的 master 分支使用任何人的 Recipe 。如果 Recipe 存储库的各个作者/维护者 - 个人或整体 - 每个“版本”都有 Git 标签,请使用它。否则,请使用您知道适用于您的基础架构的特定提交。虽然 GitHub 是一个用于共享代码的有用站点,但重要的是要记住这些是开发存储库。相比之下,大多数人不会在他们的应用程序中使用库核心的 master 分支,他们会使用该库的发布版本(无论是 gem、cpan 模块、包等)。

其次,Opscode 的 Recipe 已经发布了经过测试的版本,以确保它们按照自述文件所说的那样做。这些版本发布到 Chef Community Site .虽然他们有 repositories on GitHub ,我们建议使用网站上的版本。

要将手册从站点获取到您的本地系统,有多种工具可以支持本地开发工作流程。在内部,Opscode 使用 Berkshelf ,社区中的许多人也是如此。这是一个相当完整的工作流管理工具,包括类似于 RubyGems Bundler 的依赖解析器。 . Berkshelf 还与 Vagrant 集成,这意味着您的“berksfile”中的所有 Recipe 都将复制到 Vagrant 机器上,以便在 Chef 运行中使用。

chef-repo 顶层中的示例 Berksfile 如下所示;

site :opscode
cookbook "nginx"
cookbook "mysql"
cookbook "my_application", :git => "https://git.example.com/cookbooks/my_application.git"

然后使用 berks install下载 Recipe 。 Berkshelf 也将使用说明书中的元数据来解决它们的依赖关系。这将使用社区站点 API 下载 nginx 和 mysql 说明书,然后从内部 Git 存储库中检索“my_application”说明书。然后,要在 vagrant 中使用 berkshelf,请将其放在 vagrantfile 的顶部;
require 'berkshelf/vagrant'

然后,当您“Vagrant ”时,如果您使用 Chef Solo,berkshelf 会将所有 Recipe 复制到 Vagrant 机器中。如果您使用 Chef 客户端/服务器,则使用 berks upload将所有 Recipe 上传到服务器,vagrant 中的客户端配置器将从服务器下载。

Riot Games Berkshelf 的主要开发者之一 Jamie Winsor 写了一篇 thorough guide .

Berkshelf 的替代工具是 Librarian Chef .它纯粹是一个依赖管理工具,而不是工作流工具。它“接管”了您的 cookbooks目录管理那里的所有内容,您的定制 Recipe 进入site-cookbooks .然后,您可以像往常一样将 Vagrant 与单独的配置器一起使用,或者将客户端/服务器与 knife cookbook upload 一起使用。 .

最后,knife因为它附带 Chef Client RubyGem 有一个插件,cookbook site install .虽然 Opscode 作为 Chef gem 的一部分支持和维护这一点,但许多人正在将他们的工作流程转移到使用 Berkshelf 或 Librarian。 Chef documentation has more information on this plugin .

如果您还有其他问题,#chef irc channelChef mailing list是提问和讨论工作流程的好地方。

关于chef-infra - 如何在 Vagrant 中使用新的 opscode 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993677/

相关文章:

linux - Chef 忽略 apt-get 更新

ruby - Grep Curl Elasticsearch在Chef中的输出

macos - vagrant-coreos 图像在重启时在 OS X 的 virtualbox 4.3.2 中删除共享文件夹

php - 如何在 docker 上运行 3 层应用程序,使用 vagrant 在 3 个不同的 centos 上运行,

passwords - 如何确定 Chef "user"资源的密码属性值?

ubuntu - Chef 服务器 webui 不工作

json - 在Chef中使用属性

node.js - 如何使用 vagrant 设置 Node 检查器?

python - 在 Vagrant Ubuntu 20.04 VM 上安装 pyenv

chef-infra - 创建客户端时出现vagrant up错误? Chef-stacktrace:OpenSSL::PKey::RSAError:需要私钥