Какво правят 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
Това би било по-добре да го зададете в списъка с имейли или да ме пуснете в #chef IRC канала (аз също съм coderanger там) и мога да ви дам общ преглед.   -  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“), той търси записа на източника (обикновено „source"https://supermarket.getchef.com"' в горната част на Berksfile на готварската книга).

Berksfile също има „метаданни“ под записа на източника. Това зарежда зависимостите на готварската книга, изброени във файла metadata.rb на готварската книга. Те могат да бъдат заменени от зависимостите на готварската книга, изброени под записа „метаданни“ в Berksfile.

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

Въпреки това, Berkshelf не зарежда рекурсивно файловете metadata.rb или Berkshelf на зависимостите.

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

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

Foo ще посочи зависимостта на Bar в metadata.rb или Berksfile.

Лентата ще покаже зависимостта на Baz или в metadata.rb, или в Berksfile.

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

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

Така че често срещано използване е Private Berkshelf-API сървър, който сочи както към Private Chef Server (съхраняващ непублични готварски книги), така и към сървъра на 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
Ако не използвате API сървър на Berkshelf, трябва да напишете пълната верига от зависимости във всяка готварска книга. Ако все пак използвате API сървър на Berkshelf, тогава трябва да напишете само една стъпка от зависимости във всяка готварска книга, след което пълната верига се компилира от berkshelf с помощта на API сървъра. - person yoshiwaan; 15.04.2015