Чем Berkshelf-api и Chef Supermarket отличаются от традиционных хранилищ артефактов?

Я знаком с репозиториями артефактов, такими как Artifactory, Maven и Nexus.

Что отличает Berkshelf-API / Chef Supermarket от вышеупомянутых репозиториев артефактов?

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

Пояснение: это не основанный на мнении вопрос, я ищу технические причины, почему Berkshelf-API / Chef Supermarket используются для Chef Cookbooks вместо других типичных репозиториев артефактов.


person DonBecker    schedule 30.10.2014    source источник
comment
Лучше спросить об этом в списке рассылки или на IRC-канале #chef (я там тоже кодер), и я могу дать вам обзор.   -  person coderanger    schedule 31.10.2014
comment
На это ответили в IRC.   -  person coderanger    schedule 31.10.2014
comment
@coderanger: спасибо, что помогли мне разобраться в деталях того, как это работает   -  person DonBecker    schedule 15.11.2014


Ответы (1)


tl;dr — Berkshelf-API и Chef Supermarket — это то, что Berkshelf использует для загрузки зависимостей кулинарных книг. Они предоставляют Berkshelf специально отформатированный документ .JSON для определения зависимостей кулинарных книг. Я не нашел причин, по которым другие репозитории артефактов нельзя было бы изменить, чтобы они возвращали документ .JSON в аналогичном формате, но, насколько мне известно, в настоящее время это не так.

Berkshelf-API: "Сервер, который индексирует кулинарные книги из различных источников и размещает их через REST API"

На самом деле Berkshelf-API используется Chef Supermarket.

Вы можете вручную получить список кулинарных книг из супермаркета, добавив «/universe» к URL-адресу (https://supermarket.getchef.com/universe).

Когда Berkshelf используется для разрешения зависимостей (используя «berks install» или «berks update»), он ищет исходную запись (обычно «источник» https://supermarket.getchef.com"' вверху файла Berksfile поваренной книги).

В Berksfile также есть «метаданные» под исходной записью. Это загружает зависимости поваренной книги, перечисленные в файле поваренной книги metadata.rb. Их можно переопределить зависимостями поваренной книги, перечисленными под записью «метаданные» в Berksfile.

Затем Berkshelf начинает загрузку зависимостей поваренной книги из исходной записи (в данном случае Supermarket).

Однако Berkshelf не загружает файлы зависимостей metadata.rb или Berkshelf рекурсивно.

пример: если Foo зависит от Bar, который зависит от Baz

Фу => Бар => Баз

Foo укажет зависимость Bar либо в metadata.rb, либо в Berksfile.

Bar укажет зависимость Baz либо в metadata.rb, либо в Berksfile.

Однако Berkshelf не будет определять зависимости для Bar (в данном случае Baz), читая файл metadata.rb или Berksfile для Bar. Вместо этого он определяет зависимости Bar, используя кэшированный список версионных кулинарных книг из Berkshelf-API, который возвращается при вызове исходной записи.

Частный сервер Berkshelf-API может быть настроен с несколькими конечными точками, указывающими на разные репозитории кулинарных книг (либо на другой сервер Berkshelf-API, либо на сервер Chef).

Таким образом, обычно используется частный сервер Berkshelf-API, указывающий как на частный сервер Chef (хранящий частные кулинарные книги), так и на сервер Chef Supermarket (хранящий общедоступные кулинарные книги).

person DonBecker    schedule 14.11.2014
comment
пожалуйста, проясните еще одно сомнение для меня. скажем, например: у меня есть рецепт A, который зависит от рецепта B и рецепта C. теперь этот рецепт B зависит от рецепта D, а рецепт C зависит от рецепта E. если я упомяну только рецепты B и C в моем berksfile, будет ли он автоматически управляться рецепты D и E. Должен ли я упоминать их имена в файле berksfile? - person Subham Tripathi; 28.11.2014
comment
Если вы не используете сервер Berkshelf API, вам нужно прописать полную цепочку зависимостей в каждой кулинарной книге. Если вы используете API-сервер Berkshelf, вам нужно написать только один шаг зависимостей в каждой кулинарной книге, после чего полная цепочка компилируется berkshelf с использованием API-сервера. - person yoshiwaan; 15.04.2015