Указание, какие поваренные книги использовать с поваром Соло - PullRequest
17 голосов
/ 12 марта 2012

Я использую chef-solo для локального тестирования своих кулинарных книг, но я хочу иметь возможность запускать только те кулинарные книги, которые я тестирую.В настоящее время кажется, что chef-solo будет запускать все кулинарные книги в каталоге кулинарных книг, указанном в solo.rb.Я указал список выполнения в файле атрибутов json и указал местоположение файла json в solo.rb, но это, похоже, не помогает.По крайней мере, он анализирует атрибуты для всех других кулинарных книг, потому что у меня есть одна, которая не работает для моей локальной конфигурации, и она не проходит весь прогон.

Лучшее решение, которое я нашел до сих пор, - это переместитьповаренные книги, которые мне нужны для тестирования в другом каталоге, и укажите это в solo.rb.Есть ли лучший способ сделать это?

Ответы [ 5 ]

28 голосов
/ 13 марта 2012

Обновление : 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) и должен рефакторинг тех вещей, которые должны быть выполнены в ресурсе под названием из рецепта.

14 голосов
/ 02 сентября 2013

Также стоит отметить, что при тестировании вы можете легко переопределить runlist

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]"
5 голосов
/ 12 марта 2012

К сожалению, я не думаю, что есть. Chef работает в двухпроходном режиме: сначала он анализирует и строит модель ваших поваренных книг (фаза «компиляции»), а затем запускает только те поваренные книги, которые вы указали в рабочем списке. Я считаю, что он делает это, чтобы убедиться, что он ловит зависимости между кулинарными книгами на этапе компиляции. Фаза компиляции должна быть последовательной, иначе произойдет ошибка.

Чтобы действительно понять это, посмотрите на ресурс ruby ​​block . Любой рубин, который есть в ваших рецептах, будет оцениваться в время компиляции ; любой рубин, который вы хотите запустить при оценке времени, должен быть помещен в ресурс блока рубина. Как только вы поймете это, природа двухпроходной оценки станет очевидной.

Я думаю, что ваши единственные варианты - вносить ваши поваренные книги по одной, как вы, или исправлять свои атрибуты.

2 голосов
/ 09 апреля 2018

Вам необходимо создать файл JSON.Там вы можете указать, какую именно кулинарную книгу следует запускать:

{
  "run_list": [ "recipe[hello-chef]" ]
}

Очень хорошо объяснено в этом пошаговом руководстве: http://codeflex.co/creating-and-running-your-first-chef-cookbook/

1 голос
/ 11 мая 2016
...