Разрешить рекурсивные зависимости git cookbook с помощью Berkshelf

Версия tl;dr: способен ли Berkshelf разрешить рекурсивные зависимости в кулинарных книгах на основе 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"

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)

Я могу решить проблему, добавив все URL-адреса Git для всех моих внутренних кулинарных книг в "основной" 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"

Во всяком случае - я думаю, что это не должно быть решением этой проблемы.

Огромное спасибо за вашу помощь!

2 ответа

Решение

Хорошо, читая это https://github.com/berkshelf/berkshelf/pull/304 Я думаю, я обнаружил, что это действительно невозможно. До сих пор не понимаю, почему - но это еще одна проблема:-)

Как упомянуто в моем вопросе, решение состоит в том, чтобы добавить все зависимости поваренной книги и их git URL в верхний уровень Berksfile:

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"

Моя контрмера - использовать сервер API Berkshelf. Вместо того, чтобы загружать репозитории из репозиториев Git, я указываю сервер Berks API на наш Chef Server.

Другие вопросы по тегам