«Поваренная книга» шеф-повара в Berksfile и «зависит» в metadata.rb

В чем разница между добавлением кулинарных книг в Berksfile с помощью «cookbook» и добавлением кулинарных книг в metadata.rb с использованием «depends»? Например, если я добавлю в metadata.rb

depends 'nginx'

мне нужно добавить его в Berksfile, используя

cookbook 'nginx'

?


person tokenvolt    schedule 16.08.2014    source источник


Ответы (3)


Berksfile специфичен для Berkshelf, а файл метаданных встроен в Chef.

Добавление ваших зависимостей в файл метаданных позволяет другим приложениям, таким как librarian-chef или супермаркет, также читать ваши зависимости.

Обратите внимание, что Berkshelf также считывает зависимости из метаданных, если вы добавляете строку metadata в файл Berksfile.

Я настоятельно рекомендую указать все зависимости в вашем файле метаданных и использовать ваш Berksfile, чтобы указать, где хранятся определенные кулинарные книги, если они недоступны в супермаркете (например, Github или локальный путь).

person Nils Landt    schedule 16.08.2014
comment
Итак, если я хочу использовать кулинарную книгу nginx из супермаркета, мне нужно всего лишь добавить depends 'nginx' в metadata.rb. Но если «nginx» находится где-то еще (например, на Github), мне также нужно добавить cookbook 'nginx', github: <nginx-url-repo>. Это правильно? - person tokenvolt; 16.08.2014
comment
Спасибо за подробное объяснение! Это развеяло многие сомнения - person Ganesh Hegde; 20.07.2015
comment
Я не понимаю, зачем вообще использовать берки, поскольку в метаданных есть source_url для пользовательских URL-адресов. - person Asaf; 03.09.2015
comment
@Asaf Я почти уверен, что source_url в metadata.rb — это просто ссылка на исходный код поваренной книги, не URL-адрес, с которого Chef фактически загрузит поваренную книгу. сам. Другими словами, сам Chef (без Berkshelf или чего-то подобного) не будет разрешать зависимости поваренной книги; предполагается, что все зависимости либо установлены на вашем сервере, либо доступны в официальном супермаркете Chef. Вы можете запустить свой собственный сервер супермаркета, но в противном случае для использования кулинарных книг из других мест потребуется Berkshelf или аналогичный. - person Kenny Evitt; 25.12.2015
comment
@Asaf - Berks может рекурсивно загружать любые зависимые поваренные книги для локальной разработки, а также обрабатывать загрузку всех их на ваш сервер Chef. Я не думаю, что в наборе инструментов Chef есть соответствующий инструмент, чтобы сделать то же самое. Беркс является частью Chef DK. Спасибо всем за заметки. - person J.Z.; 25.02.2016
comment
Имейте в виду, что вам может понадобиться указать версию в Berksfile, если вы хотите переопределить источник и использовать другую ветку. - person dragon788; 30.11.2017
comment
Если кто-то вроде меня пытается использовать кулинарную книгу, которая находится внутри шеф-инфра-клиента, но за пределами супермаркета, то добавление source :chef_server в Berksfile поможет. - person neaGaze; 27.06.2019

Berksfile и metadata.rb решают разные задачи и проявляются на разных этапах жизненного цикла поваренной книги.

  1. Berksfile предназначен для управления зависимостями для кулинарных книг. Рассмотрим случай, когда моя кулинарная книга использует кулинарную книгу сообщества из шеф-супермаркет. В этом случае сначала мне нужно загрузить эту кулинарную книгу сообщества из супермаркета и загрузить ее вместе с моей собственной кулинарной книгой на сервер шеф-повара. Berksfile упрощает для вас этот рабочий процесс. С помощью одной команды (berks install) он загружает все зависимые поваренные книги (и их зависимые поваренные книги — транзитивные зависимости) из соответствующих источников (может быть из репозитория git или из супермаркета). Еще одна единственная команда berks upload загружает все эти поваренные книги на сервер шеф-повара. Вам не нужно загружать их по отдельности с помощью knife cookbook upload. Роль Berksfile в конкретном жизненном цикле поваренных книг на этом заканчивается.

  2. metadata.rb передается клиенту chef-client во время фактического схождения узла. Он использует этот файл для загрузки всех необходимых кулинарных книг с сервера шеф-повара (при условии, что эти кулинарные книги теперь доступны на сервере шеф-повара с помощью berkshelf или knife ) на узел для успешного завершения запуска шеф-клиента.

person vinayakshnd    schedule 31.03.2016
comment
Превосходно! Это действительно объясняет, почему у нас есть и то, и другое. +1 - person KingAndrew; 27.02.2018
comment
Этот ответ, к сожалению, до сих пор не объясняет, следует ли объявлять зависимости в обоих файлах. - person Kamil Roman; 06.12.2018

Вам не нужно объявлять зависимости в обоих файлах. @Kamil Объявите свои зависимости в metadata.rb и укажите источник местного супермаркета или супермаркета шеф-повара в файле berksfile, который загрузит зависимости для вас.

person Anuj    schedule 15.06.2020