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