使用Berkshelf解析递归git cookbook依赖项

时间:2015-04-13 10:37:55

标签: git dependencies chef berkshelf

tl; dr版本: Berkshelf是否能够解决基于Git的烹饪书中的递归依赖性,如果是 - 如何?

我尝试使用Berkshelf管理我的Chef cookbook依赖项。这些食谱都存储在内部的Git存储库中。依赖关系如下:

env_dockerhub_dev 
  >>depends on>> app_dockerhub 
    >>depends on>> app_docker

我项目中的主要Berksfile如下所示:

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

cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"

env_dockerhub_dev食谱有metadata.rb这样:

name             'env_dockerhub_dev'
...
depends          'app_dockerhub'
depends          'base_ubuntu'

Berksfile这样:

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

cookbook "app_dockerhub", git: "git@URL_TO_GIT_SERVER/chef_app_dockerhub.git"
cookbook "base_ubuntu", git: "git@URL_TO_GIT_SERVER/chef_base_ubuntu.git"

当我现在运行berks install时,收到以下错误消息:

Resolving cookbook dependencies...

Fetching 'env_dockerhub_dev' from git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git (at master)
Fetching cookbook index from https://supermarket.chef.io...
Unable to satisfy constraints on package app_dockerhub, which does not exist, due to solution constraint (env_dockerhub_dev = 0.1.0). Solution constraints that may result in a constraint on app_dockerhub:     [(env_dockerhub_dev = 0.1.0) -> (app_dockerhub >= 0.0.0)]
Missing artifacts: app_dockerhub,base_ubuntu
Demand that cannot be met: (env_dockerhub_dev = 0.1.0)
Unable to find a solution for demands: env_dockerhub_dev (0.1.0)

我可以解决这个问题,当我将所有内部菜谱的所有Git URL添加到" main" Berksfile(我项目根目录中的Berksfile)是这样的:

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

# the main cookbook
cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"

# the cookbooks that are "recursively" 
cookbook "app_dockerhub", git: "git@gURL_TO_GIT_SERVER/chef_app_dockerhub.git"
cookbook "app_docker", git: "git@URL_TO_GIT_SERVER/chef_app_docker.git"

无论如何 - 我认为这不应该是解决这个问题的方法。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我的对策是使用Berkshelf API server。我没有从Git存储库加载存储库,而是将Berks API服务器指向我们的Chef服务器。