【问题标题】:Resolve recursive git cookbook dependencies with Berkshelf使用 Berkshelf 解决递归 git 食谱依赖项
【发布时间】:2015-06-18 15:25:41
【问题描述】:

tl;dr 版本:Berkshelf 是否能够解决基于 Git 的说明书中的递归依赖关系,如果可以,如何解决?

我尝试使用 Berkshelf 管理我的 Chef 食谱依赖项。这些食谱都存储在内部 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 添加到“主”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"

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

非常感谢您的帮助!

【问题讨论】:

    标签: git dependencies chef-infra berkshelf


    【解决方案1】:

    好的 - 阅读此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"
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多