使用Berkshelf解决递归git cookbook依赖关系

使用Berkshelf解决递归git cookbook依赖关系,git,dependencies,chef-infra,berkshelf,Git,Dependencies,Chef Infra,Berkshelf,tl;dr版本:Berkshell是否能够解决基于Git的食谱中的递归依赖关系?如果是,如何解决? 我试着用Berkshelf管理我的厨师烹饪书依赖性。这些食谱都存储在内部Git存储库中。依赖项如下所示: env_dockerhub_dev >>depends on>> app_dockerhub >>depends on>> app_docker 我的项目中的主Berksfile如下所示: source "https://sup

tl;dr版本:Berkshell是否能够解决基于Git的食谱中的递归依赖关系?如果是,如何解决?

我试着用Berkshelf管理我的厨师烹饪书依赖性。这些食谱都存储在内部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"
name             'env_dockerhub_dev'
...
depends          'app_dockerhub'
depends          'base_ubuntu'
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"
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"
env_dockerhub_dev
cookbook有一个
metadata.rb
如下所示:

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

cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
name             'env_dockerhub_dev'
...
depends          'app_dockerhub'
depends          'base_ubuntu'
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"
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"
还有一个像这样的
Berksfile

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

cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
name             'env_dockerhub_dev'
...
depends          'app_dockerhub'
depends          'base_ubuntu'
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"
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"
现在运行
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"

cookbook "env_dockerhub_dev", git: "git@URL_TO_GIT_SERVER/chef_env_dockerhub_dev.git"
name             'env_dockerhub_dev'
...
depends          'app_dockerhub'
depends          'base_ubuntu'
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"
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"
无论如何,我认为这不应该是解决这个问题的办法

谢谢你的帮助

好吧——读了这篇文章,我想我发现这真的是不可能的。仍然不明白为什么——但这是另一个问题:-)

正如我在问题中提到的,解决方案是在顶级Berksfile中添加所有cookbook依赖项及其git URL:

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

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

# other cookbook dependencies (resolved 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"

我的对策是使用一种新的方法。我没有从Git repos加载存储库,而是将berksapi服务器指向我们的Chef服务器