#ruby #chef-infra #chef-recipe #cookbook #recipe
#ruby #шеф-повар-инфра #шеф-повар-рецепт #кулинарная книга #рецепт
Вопрос:
У меня есть кулинарная книга (CB1) с рецептом ( install_app
), который будет устанавливать приложения. install_app
на самом деле выполняет серию других рецептов в CB1 и использует атрибуты для изменения того, какое приложение вы устанавливаете, и настроек приложения.
У меня есть рецепты для каждого приложения, которое устанавливает атрибуты CB1, а затем каждый из них вызывает include_recipe CB1::install_app
.
Но, похоже, это не работает. Chef сначала компилирует все рецепты в списке выполнения, а затем выполняет их, поэтому выполняется только первый вызов include_recipe CB1::install_app
.
Как заставить шеф-повара запускать рецепты несколько раз?
Ответ №1:
Это невозможно, рецепты считаются одиночными. Вместо этого вы хотите создать пользовательский ресурс. Затем вы можете вызывать этот ресурс несколько раз с разными входными данными (свойствами).
Комментарии:
1. Arg единственный способ сделать это LWRP? Есть ли способ заставить шеф-повара сделать это? Я видел что-то под названием include_recipe_now, которое выглядит так, как будто оно может делать то, что я хочу.
2. Нет,
now
кулинарная книга предназначена для работы с материалами compile и converge, что совсем не то, что вы хотите. Технически это возможно, но это нарушает все виды вещей до такой степени, что я не собираюсь рассказывать вам, как: P Возьмите существующий код рецепта и вставьте его в блок действий пользовательского ресурса, это не должно быть так сложно. Затем замените все, что должно меняться в зависимости от свойств (т.Е.node['foo']
->new_resource.foo
и добавитьproperty :foo
в верхней части файла). Затем создайте новый файл рецепта, чтобы вызывать ваш пользовательский ресурс несколько раз с идентификаторами узлов в качестве входных данных.3. Могу ли я использовать определения для этого? Из того, что я читаю, «Определение создаст оболочку, которая группирует один или несколько других ресурсов вместе». Похоже, они также служат этой цели? Преимущества одного над другим? Определения выглядят так, как будто они проще.
4. Раньше определения были проще, на данный момент нет причин их использовать 🙂 ознакомьтесь с новым синтаксисом 12.5 для пользовательских ресурсов, это очень просто