Указание, какие поваренные книги запускать с Chef Solo

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

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


person Joshua Clark    schedule 12.03.2012    source источник


Ответы (5)


Обновление: 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
comment
все ссылки битые - person freedev; 15.11.2016

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

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]"
person KCD    schedule 02.09.2013
comment
Если ваши поваренные книги определены в /etc.chef-solo.rb, вы также можете сократить их таким же образом $ sudo chef-solo -o nginx::start - person JREAM; 17.02.2015
comment
эта команда дает мне следующую ошибку: Нет такой поваренной книги. Название кулинарной книги в порядке, и название рецепта тоже в порядке. - person Lechucico; 05.10.2017

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

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

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

person Matt    schedule 12.03.2012

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

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

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

person John Detroit    schedule 09.04.2018

chef-client --local-mode hello.rb
проверить
https://learn.chef.io/learn-the-basics/ubuntu/configure-a-resource/
https://docs.chef.io/ctl_chef_client.html

person 7900ms    schedule 11.05.2016