如何将食谱管理迁移到berkshelf

时间:2015-03-20 13:41:14

标签: chef berkshelf

我有点落入厨师手中,现在我有几个节点正在运行,并想清理我如何管理我的烹饪书和依赖项。

从历史上看,我经常会在厨师超市找到一本符合我需要的食谱,并用刀子来安装这本食谱。 knife cookbook site install foo。将食谱放入我的食谱目录chef-repo/cookbooks/foo

当我无法找到我想要的内容时,我会在同一目录chef-repo/cookbooks/mycompany-bar

中创建自己的命名空间食谱

现在我有一个很好的社区烹饪书和自定义烹饪书的小集合,我发现很难管理依赖项并希望迁移到berkshelf。

我的问题是:

我的很多角色只是使用我安装的社区食谱,而不是任何类型的包装食谱,包括"包括"它们。

即:

run_list "recipe[hostname]", "recipe[user::data_bag]", "recipe[chef-client::delete_validation]", "recipe[chef-client]", etc....

我不确定如何安装和使用任何社区食谱与berkshelf w / out首先创建我自己的食谱,然后依赖社区食谱。这是我应该做的正确方法吗?

我是否需要为这些现有的烹饪书写一堆包装?即:拥有我自己的mycompany-hostname食谱,这取决于社区hostname食谱?

2 个答案:

答案 0 :(得分:0)

您可以直接在Berksfile

中列出您需要的食谱
metadata # this will get anything in your metadata.rb (and recursive dependenceis)
cookbook 'cookbookname', '1.3.5' #OR
cookbook 'cookbookname' # OR
cookbook 'cookbookname' '>= 1.5.2'

当您执行berks installberks upload

时,这会将其拉入

答案 1 :(得分:0)

Berkshelf是管理cookbook和依赖项的最佳方式。

您可以在同一个berksfile中提及您的包装器cookbook及其依赖项。 “Beksfile”中的Cookbook源代码可以来自“Chef Supermarket”,GIT源代码和系统本地路径。

考虑食谱“mysql_wrapper”是您开发的食谱,它使用“mysql”社区食谱。 还要考虑包装器位于系统本地路径中。

以下是上述场景的示例berksfile内容。

source "https://supermarket.chef.io"

cookbook 'mysql'
cookbook 'mysql_wrapper', path: '/system/local/path/to/wrapper-cookbooks/mysql_wrapper'

工作原理?

当你运行“berks install”或“berks upload”时,Berkshelf会解析berksfile中提到的食谱。

依赖社区食谱将从“超市”下载,因为我们在第一行引用了它。 虽然包装器菜谱将由本地路径引用。

设置管理cookbook,角色和data_bags的项目

  • 您需要使用烹饪书和其他内容创建项目存储库。
  • 项目回购只是,一个目录包含其他目录1.角色,2。数据库,3。食谱和4.环境。根据您的要求创建存储库。
  • 将您的食谱放在cookbooks目录中。
  • 将目录创建为“角色”。将角色添加为“.json”文件。
  • 如果是data_bag / data_bag_item,请将目录创建为data_bags。为每个data_bag创建一个目录,并将项目添加为“.json”文件。
  • 在repo中创建bersfile

管理Chef服务器

如果您要上传内容,请按以下步骤操作

  • 在项目仓库
  • 中创建目录“.chef”
  • 将Chef服务器刀/ pem文件复制到.chef
  • 从项目仓库中运行命令“berks upload”。您的食谱将上传到厨师服务器。
  • 运行刀上传data_bags和刀上传角色,从repo上传您的数据库和角色。