Berks не разрешает зависимость от поваренных книг
Я пытаюсь создать git-репозиторий, который управляет моей средой. У меня есть набор lwrp, написанный для конкретных задач. Эти lwrps внутренне зависят от многих поваренных книг сообщества.
В каждой моей кулинарной книге есть файл Berksfile, в котором я указываю разрешение зависимостей. В корневой папке моего репозитория у меня есть основной Berksfile, в котором перечислены все поваренные книги, которые я хочу получить из своего репозитория.
Что я хочу сейчас, так это то, что когда я выполняю установку berks из корневого каталога, он должен получить мои поваренные книги, а затем проанализировать их, чтобы найти отдельный файл berks из каждой из этих поваренных книг и разрешить все зависимости. Однако это не так.
У кого-нибудь есть идеи по этому поводу? Это общий сценарий того, как работает Беркс? Или я что-то упустил, чтобы зависимости не были разрешены?
Чтобы дать больше информации: моя кулинарная книга имеет этот berksfile
source 'https://supermarket.chef.io'
cookbook 'apache_spark', '~> 1.2.12'
И искра апача имеет внутреннюю зависимость от
cookbook 'monit', github: 'phlipper/chef-monit', tag: '1.5.2'
1 ответ
Это дубликат упомянутого вопроса, но поскольку на него нет супер-подробного ответа, я расскажу подробнее здесь.
Как указано в других ответах, Berksfile
директивы являются "непереходными". Зависимости в кулинарной книге metadata.rb
это символические зависимости, просто имя и ограничение версии без информации о том, где его получить. Каждый инструмент, который работает с кулинарными книгами, по-разному понимает, как обрабатывать эти символические зависимости, например, когда вы запускаете berks install
вы можете извлекать зависимости из супермаркета или GitHub, но когда chef-клиент обрабатывает их, он получает все от Chef Server. Сохранение этого разделения между символическими зависимостями и тем, где их можно получить, позволяет сосуществовать множеству инструментов. Berksfile
предоставляет дополнительные данные о том, откуда загружать определенные поваренные книги, либо увеличивая, либо заменяя информацию из символических зависимостей, но поскольку эти дополнительные директивы не являются частью метаданных поваренной книги, их нельзя сделать рекурсивно.
Большая проблема в том, что супермаркет - это плоское пространство имен, поэтому может быть только одна кулинарная книга monit
, Это заставляет многих людей не публиковать вещи в супермаркете и зависеть от них через директивы git source. Это означает depends "monit"
уже не так ясно, как должно быть. Это действительно следует считать ошибкой в неопубликованной кулинарной книге, но я понимаю нежелание людей переименовывать свои кулинарные книги, чтобы выпустить их должным образом.
Обычное исправление - скопировать пасту в новый Berksfile
из ваших апстриков или для создания изолированного юниверса поваренной книги в частном экземпляре супермаркета (или эквивалентной организации Chef Server), где вы загружаете только те вещи, которые хотите, и при этом depends "monit"
снова становится однозначным.