Зависимости Кулинарных Книг Berkshelf И Chef

Привет, пользователи Хабра!

Зависимости кулинарных книг Berkshelf и Chef

Я продолжаю свое погружение в острое автоматизация -а и управление конфигурацией -и, в то же время, пытаюсь поделиться опытом с сообщество .

Мы снова поговорим об инструменте для автоматизации разрешения зависимостей.

Шеф-повар Кулинарная книга -ов, которые использует наша компания, а именно - Беркшельф .



При чем здесь Berkshelf?

Шеф-повар имеет достаточно большое и развивающееся сообщество, которое постоянно способствует созданию и редактированию Кулинарная книга -с.

Все они хранятся на сайте Сообщества, многие из них используются нами очень часто.

Однако есть в нашей компании одно «но», связанное с монтажом.

кулинарная книга сообщества -с.

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

Кратко процесс написания обертки описан в Эта статья .

Но наличие правильного пути не означает, что все пойдут по нему.

Вот почему в репозитории Было много кулинарных книг от нашей компании.

кулинарная книга сообщества -s с нечестными правками.

И пришло время почистить репозиторий :) План был следующий: - выделять кулинарная книга сообщества -и в нашем репозитории; — оценить наличие и количество локальных правок ( разница между идентичными версиями Кулинарная книга -ов); - вносить изменения в обертка и включить в него звонок кулинарная книга сообщества -а или рецепт из него; - удалить кулинарная книга сообщества и добавьте его в зависимости обертка -А.

Что делать с «очищенными»? кулинарная книга сообщества -ами? Как и после удаления - они будут выглядеть "чистыми" на Шеф-сервер -э? Вот тут-то и придет на помощь Беркшельф .



Что такое Беркшельф и с чем его едят?

Беркшельф менеджер зависимости Для кулинарная книга шеф-повара -с.

Он написан на Ruby и имеет методы и API для взаимодействия с Шеф-сервер .

Монтаж Беркшельф происходит от Ruby Gems или в рамках использования Шеф-повар ДК .

Мы используем Беркшельф версии 2.0 Однако недавно вышла версия 3.0, которая принесла некоторые изменения и вкусности.

Если вы решите использовать Рубиновый драгоценный камень - Советую установить его внутри Рубин , установлен Шеф-сервер -om (исполняемые файлы располагаются по пути - /opt/chef/embedded/bin/ ).

Для взаимодействия с Chef Server вам необходимо настроить Berkshelf, указав ему адрес нашего сервера и сертификаты для авторизации на нем.

Для конфигурации вам необходимо выполнить следующую команду:

  
  
  
  
  
  
  
  
  
  
  
   

berks configure

Конфигурация Файлы расположены по одному из следующих путей:

$PWD/.

berkshelf/config.json $PWD/berkshelf/config.json $PWD/berkshelf-config.json $PWD/config.json ~/.

berkshelf/config.json

После правильной установки Беркшельф -a - можно перейти к разрешению зависимости Кулинарная книга -с.

Для этого, Беркшельф на первом этапе копии Кулинарная книга - и и они зависимости самостоятельно полка -s (локальное хранилище/репозиторий Беркшельф -a, по умолчанию — каталог ~/.

berkshelf/кулинарные книги/ ), а затем загружает все в Шеф-сервер .

Сразу возникают вопросы: " Откуда Berkshelf узнает о зависимостях? ", " Что он делает для их решения? " Инструкции для Беркшельф содержалась в Берксфайл находится в корневом каталоге Кулинарная книга -А.

Этот файл создается с помощью команды

berks init

в корневом каталоге.

Содержимое этого файла описывает зависимости и источник их разрешения.

Пример такого файла:

site :opscode metadata cookbook 'my-cookbook', (:path | :git | :github) cookbook 'my-book-2', ('> 1.0.0')

В этом файле указано следующее: — учитывать зависимости от файла метаданные.

рб нашу кулинарную книгу и загрузите ее с Сообщество опкода Веб-сайт; — моя кулинарная книга будет загружен по пути, указанному в скобках (это может быть либо местный путь или ссылка на Гит ); — моя-книга-2 последняя версия выше 1.0.0 будет загружена с Сообщество опкода сайт. После этого вы можете запустить

berks install

и дождитесь успешного копирования зависимостей в локальное хранилище Беркшельф -А.

В результате каталог хранения должен содержать все Кулинарная книга - и упомянуто в поле зависит от файл метаданные.

рб , их зависимости (зависимости зависимости) и два Кулинарная книга - упомянутый в Берксфайл .

Проверить результат можно командой

berks shelf list

Следующий шаг — запуск

berks upload

который загрузит все из локального хранилища в Шеф-сервер .

В результате (при условии, что Шеф-сервер доступен и мы можем войти в него с помощью файлов сертификатов) — все зависимости будут разрешены.

Результат загрузки можно проверить командой

knife cookbook list

вывод которого должен содержать новые Кулинарная книга -И.

Собственно, вот и весь процесс базового использования Беркшельф .

Конечно, это не весь функционал, потому что.

никакого упоминания о взаимодействии.

Беркшельф С Бродяга , Шеф-повар Соло , Шеф-клиент , а также некоторые нововведения версии 3.0. Однако, думаю, большинству этого достаточно.



Наша история использования Berkshelf

Все было бы хорошо, если бы снова не одно «но» - Беркшельф не умеет работать циклично.

Я очень удивлён, потому что.

не нашел варианта, в котором он" изначально "может учитывать вложенность каталогов с Кулинарная книга -ами, типа того вложенный -режим.

Что я имею в виду? Например, представим типичную ситуацию: есть каталог шеф-репо , в который вложен каталог кулинарные книги , содержащий наши кулинарные книги ( .

/chef-repo/кулинарные книги/ ).

В текущей версии Беркшельф — вам нужно зайти в каждый из каталогов кулинарных книг и выполнить связанные с ним команды Беркшельф .

То есть - бить — скрипт, который бы это делал, не вручную, правда.

Это решение, но увы — не самый лучший, прямо скажем — «костыль».

Найдено в Интернете статья , в котором эта проблема была решена с помощью кода Ruby. Я дам вам код для нашего " корень " Berksfile находится в каталоге .

/шеф-репо/ :

site :opscode metadata def dependencies(path) berks = "#{path}/Berksfile" instance_eval(File.read(berks)) if File.exists?(berks) end Dir.glob('.

/cookbooks/*').

each do |path| dependencies path cookbook File.basename(path), :path => path end cookbook 'gecode', '= 2.1.0'

По сути, этот фрагмент кода собирает содержимое всех каталогов.

Кулинарная книга -ов (их метаданные.

рб И Берксфайл -ов) в " корень «Берксфайл.

Мы успешно применили предложенное решение и вуаля – всё! Кулинарная книга - и оказался на нашем Шеф-сервер .

Однако в упомянутой статье не упоминается ни один большой особенность - формат Берксфайл -ы наших Кулинарная книга -с.

Экспериментальным путем было установлено, что они должны выглядеть так:

group :name_of_cookbook do cookbook 'my-cookbook', (:path | :git | :github) cookbook 'my-book-2', ('> 1.0.0') end

То есть список Кулинарная книга -s, которые должны соответствовать определенные условия - например, версия или местоположение, заключенные в группа (чтобы идентичные зависимости разных кулинарных книг не вызывали конфликтов, таких как несколько записей).

Все остальные зависимости берутся из файла метаданные.

рб .

Ниже приведен конкретный пример, чтобы было понятнее: Скрытый текст

group :database do cookbook 'postgresql', '= 3.3.4' cookbook 'aws', :path => '.

/cookbooks/aws' cookbook 'xfs', :path => '.

/cookbooks/xfs' cookbook 'mysql', '= 4.1.2' end

В результате для Кулинарная книга база данных 4 будут загружены Кулинарная книга -a, которые соответствуют определенным условиям, а также всем другим зависимостям, упомянутым в метаданные.

рб , а также упомянутые зависимости зависимости (извините за тавтологию).

Все что осталось сделать после редактирования Берксфайл -s наших кулинарных книг нужно запускать в каталоге .

/шеф-репо команды

berks install && berks upload

Это решение, возможно, не очень надежное и удобное – но решение.

Он несколько раз успешно работал с нашими репозиториями.

Если кто сталкивался с такой проблемой и может поделиться опыт — пишите комментарии или в личку.

Всем спасибо за внимание, до новых статей.

P.S. Коллега говорит, что Berkshelf v.3.0 сломан, поэтому не рекомендуем! Теги: #шеф #системное администрирование #автоматизация #менеджер зависимостей #поваренная книга #berkshelf

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.