Я пытаюсь создать поваренную книгу шеф-повара, которая на данный момент является в основном просто поваренной книгой-оберткой для другой поваренной книги ( контрольная поваренная книга ). Я все еще изучаю Chef, но из того, что я могу почерпнуть из документации О рецептах и Справочной документации по ресурсам , рецепты Chef должны выполняться в том порядке, в котором они определены (черезКод Ruby и / или ресурсы Chef).
В документации О рецептах упоминается, что
Когда рецепт включен, ресурсы, найденные в этом рецепте, будут вставлены (вточно такой же порядок) в том месте, где находится ключевое слово include_recipe.
В справочной документации по ресурсам они имеют ресурс apt_update , который предположительно выполняется до include_recipe метод из-за того, что он был определен ранее в рецепте.
Моя кулинарная книга имеет один рецепт, default.rb, который буквально состоит из двух строк:
package 'ruby-dev'
include_recipe 'audit'
Однако во время запуска chef-client или chef-solo я вижу, что рецепт audit :: inspec выполняется до security :: default recipe, что приводит к поломке, потому что InSpec имеет некоторые другие зависимости, которые должны быть установлены заранее. Прежде чем использовать ресурс package , я использовал ресурс execute для явного запуска apt-get install ruby-dev
или yum install ruby-dev
в зависимости от платформы, используя оператор case, но та же проблема (весь этот кодбыл пропущен, и сначала вызывался метод include_recipe .
В случае, если это полезно, я использую Chef 12, который, как я понимаю, является EOL, но у меня есть другие зависимости, которые требуют от меня придерживаться этоговерсия Chef на данный момент.
Я вполне могу просто неправильно понять, как Chef сходится в работе и порядке выполнения, но это вызывает у меня много горя, поэтому я действительно буду признателен за некоторые указатели! Всегда ли include_recipe предшествует другому коду в вашем рецепте? Есть ли способ обойти это? Я что-то упустил?
- РЕДАКТИРОВАТЬ -
Мне удалось получить желаемую функциональность (установить другие пакеты и гемы до установки, вызванной вызовом include_recipe
)драгоценного камня зависимости), используя следующий код в моем рецепте поваренной книги:
package 'build-essential' do
action :nothing
end.run_action(:install)
chef_gem 'train' do
version "1.4.4"
action :install
end
chef_gem 'signet' do
version "0.11.0"
action :install
end
include_recipe 'audit'
Обратите внимание, что в итоге я установил пакет build-essential
вместо пакета ruby-dev
из моего исходного фрагмента кода, а также установилдва драгоценных камня для использования клиентом Chef. Все это устанавливается в порядке, который я ожидал на этапе компиляции программы Chef.
Источники: