Обновление: chef-solo больше не является "отдельным" инструментом от chef-client. Из документации:
chef-solo — это команда, которая запускает chef-client таким образом, что сервер Chef не требуется для объединения кулинарных книг. шеф-повар использует локальный режим шеф-повара шеф-клиента и не поддерживает следующие функции, присутствующие в конфигурациях шеф-клиент/сервер.
Это изменение было реализовано в Chef версии 12.11. , который соответствует RFC сообщества. а>. Это было выпущено 8 июня 2016 года. Старое поведение, описанное ниже (хотя в это время оно было 4 года назад), доступно с аргументом --legacy-mode
для chef-solo
.
Чтобы получить самую актуальную информацию о Chef Solo, ознакомьтесь с официальной документацией.
Мой первоначальный ответ ниже:
Шеф-повар (соло ИЛИ клиент) не «запускает» все поваренные книги.
Он загружает все Ruby-файлы поваренной книги в следующие каталоги в следующем порядке:
- библиотеки/*.rb
- провайдеры/*.rb
- ресурсы/*.rb
- атрибуты/*.rb
- определения/*.rb
Затем он загружает все рецепты, находящиеся в расширенном списке выполнения узла. С chef-solo
это происходит из файла JSON, поставляемого с -j
, или может быть сделано в файлах атрибутов, однако последний устарел и не рекомендуется.
Любые рецепты, включенные в расширенный список выполнения через include_recipe
, также загружаются. Chef загружает рецепты, оценивая их как код Ruby. Когда он встречает код ruby, который он распознает как ресурс или определение, он добавляет ресурс в коллекцию ресурсов, которая представляет собой упорядоченный в числовом порядке индексированный хэш всех ресурсов. Определения уникальны тем, что Chef добавляет в коллекцию ресурсов содержащиеся в них ресурсы, а не само определение. Ресурсы включенных рецептов через include_recipe
вставляются на место, затем Chef продолжает работу с включенным рецептом.
Как только Chef обработает все рецепты для всех своих ресурсов, он просматривает коллекцию ресурсов, выполняя указанное действие для каждого из них в том порядке, в котором они были добавлены в коллекцию.
Я настоятельно рекомендую прочитать документацию по этому процессу. Это относится к шеф-повару Соло; пропускается только та часть, где поваренные книги загружаются с сервера.
Чтобы убедиться, что тестируются только рецепты, которые вы хотите протестировать, включите их в список запуска узла через файл JSON. Это выглядит так:
{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] }
Список выполнения — это просто массив, и элементы могут быть recipe[cookbookname]
или role[somerole]
. Подробнее о том, как использовать роли с Chef Solo, можно прочитать в документации Chef Solo.
Если у вас вносятся системные изменения, когда Chef загружает компоненты поваренной книги (ruby-файлы в каждой поваренной книге), тогда «Вы делаете это неправильно» (tm) и должны реорганизовать эти вещи, которые должны быть выполнены в ресурсе, вызываемом из рецепта. .
person
jtimberman
schedule
13.03.2012