Привет, пользователи Хабра!
Я продолжаю свое погружение в острое автоматизация -а и управление конфигурацией -и, в то же время, пытаюсь поделиться опытом с сообщество .
Мы снова поговорим об инструменте для автоматизации разрешения зависимостей.
Шеф-повар Кулинарная книга -ов, которые использует наша компания, а именно - Беркшельф .
При чем здесь 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
-
Органическая Химия
19 Oct, 24 -
Ленгмюр, Ирвинг
19 Oct, 24 -
О Live-Коде После 130 Стримов
19 Oct, 24 -
Насколько Анонимен Опрос?
19 Oct, 24 -
Почему Мы Ставим Контент На Первое Место
19 Oct, 24 -
Ultimate Wall-E - Мультяшный Робот-Герой
19 Oct, 24