2015-04-13 5 views
5

tl; dr версия: Можно ли Berkshelf разрешить рекурсивные зависимости в поваренных книгах по мотивам Git, и если да - как?Устранение рекурсивных зависимостей поваренной книги git с Berkshelf

Я стараюсь управлять своими поваренными книгами с шеф-поваром с Berkshelf. Поваренные книги хранятся во внутренних хранилищах Git. Зависимости заключаются в следующем:

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

Основной Berksfile в моем проекте выглядит следующим образом:

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

cookbook "env_dockerhub_dev", git: "[email protected]_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: "[email protected]_TO_GIT_SERVER/chef_app_dockerhub.git" 
cookbook "base_ubuntu", git: "[email protected]_TO_GIT_SERVER/chef_base_ubuntu.git" 

Когда я теперь запустить berks install я получаю следующее сообщение об ошибке:

Resolving cookbook dependencies... 

Fetching 'env_dockerhub_dev' from [email protected]_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: "[email protected]_TO_GIT_SERVER/chef_env_dockerhub_dev.git" 

# the cookbooks that are "recursively" 
cookbook "app_dockerhub", git: "[email protected]_TO_GIT_SERVER/chef_app_dockerhub.git" 
cookbook "app_docker", git: "[email protected]_TO_GIT_SERVER/chef_app_docker.git" 

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

Thx много для вашей помощи!

ответ

4

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

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

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

# the main cookbook 
cookbook "env_dockerhub_dev", git: "[email protected]_TO_GIT_SERVER/chef_env_dockerhub_dev.git" 

# other cookbook dependencies (resolved recursively) 
cookbook "app_dockerhub", git: "[email protected]_TO_GIT_SERVER/chef_app_dockerhub.git" 
cookbook "app_docker", git: "[email protected]_TO_GIT_SERVER/chef_app_docker.git" 
1

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

Смежные вопросы