Разрешить рекурсивные зависимости 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.