如何将食谱管理迁移到伯克希尔



我有点喜欢chef,现在我有几个节点在运行,我想清理一下我如何管理我的食谱和依赖关系。

从历史上看,我经常在厨师超市里搜索一本适合我需求的食谱,然后用刀安装。CCD_ 1。它将食谱放入我的食谱目录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安装和使用任何社区食谱,先创建自己的食谱,然后依赖社区食谱。这是我做事的正确方式吗?

我需要为这些现有的食谱写一堆包装纸吗?ie:有我自己的mycompany-hostname食谱,它依赖于社区hostname食谱吗?

您可以直接在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 时将它们拉入

Berkshelf是管理食谱和依赖关系的最佳方式。

你可以在同一个berksfile中提到你的包装食谱及其依赖关系。食谱来源于"Beksfile",可以来自"Chef Supermarket"、GIT来源和系统本地路径。

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

以下是上述场景的伯克希尔内容示例。

source "https://supermarket.chef.io"
cookbook 'mysql'
cookbook 'mysql_wrapper', path: '/system/local/path/to/wrapper-cookbooks/mysql_wrapper'

它是如何工作的

当你运行"berksinstall"或"berksupload"时,Berkshelf会解析berksfile中提到的食谱。

相关社区食谱将从"超市"下载,因为我们在第一行中引用了它。而包装食谱将由本地路径引用。

建立一个管理食谱、角色和数据包的项目

  • 你需要用你的食谱和其他东西创建一个项目存储库
  • 项目repo只是,一个目录包含1的其他目录。角色,2。数据包,3。食谱和4。环境。根据您的需求创建存储库
  • 把你的食谱放在食谱目录里
  • 创建一个目录作为"角色"。将角色添加为".json"文件
  • 如果是data_bag/data_bag_item,请创建一个目录作为data_bags。为每个data_bag创建一个目录,并将项目添加为".json"文件
  • 在回购中创建bersfile

管理厨师服务器

在这种情况下,如果你想上传内容,请按照以下步骤,

  • 在项目repo中创建一个目录".chef"
  • 将您的厨师服务器刀具/pem文件复制到.Chef中
  • 从项目repo内部运行命令"berks-upload"。您的烹饪书将上传到厨师服务器
  • 运行刀具上传data_bags和刀具上传角色,从repo上传您的数据库和角色

最新更新