使用 Berkshelf 解决递归 git 食谱依赖关系
Resolve recursive git cookbook dependencies with 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"
无论如何 - 我认为这不应该是这个问题的解决方案。
非常感谢您的帮助!
好的 - 阅读此 https://github.com/berkshelf/berkshelf/pull/304 我想我发现这真的是不可能的。仍然不明白为什么 - 但这是另一个问题:-)
如我的问题所述,解决方案是在顶层 Berksfile 中添加所有说明书依赖项及其 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"
我的对策是使用Berkshelf API server。我没有从 Git 存储库加载存储库,而是将 Berks API 服务器指向我们的 Chef 服务器。
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"
无论如何 - 我认为这不应该是这个问题的解决方案。
非常感谢您的帮助!
好的 - 阅读此 https://github.com/berkshelf/berkshelf/pull/304 我想我发现这真的是不可能的。仍然不明白为什么 - 但这是另一个问题:-)
如我的问题所述,解决方案是在顶层 Berksfile 中添加所有说明书依赖项及其 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"
我的对策是使用Berkshelf API server。我没有从 Git 存储库加载存储库,而是将 Berks API 服务器指向我们的 Chef 服务器。