Заставить Chef запускать рецепты несколько раз с разными атрибутами

У меня есть кулинарная книга (CB1) с рецептом (install_app), который будет устанавливать приложения. install_app на самом деле выполняет ряд других рецептов в CB1 и использует атрибуты для изменения устанавливаемого приложения и настроек приложения.

У меня есть рецепты для каждого приложения, которое устанавливает атрибуты CB1, а затем каждое из них вызывает include_recipe CB1::install_app.

Но, похоже, это не работает. Chef сначала компилирует все рецепты в списке выполнения, а затем выполняет их, поэтому выполняется только первый вызов include_recipe CB1::install_app.

Как заставить Chef запускать рецепты несколько раз?


person red888    schedule 29.09.2016    source источник


Ответы (1)


Это невозможно, рецепты считаются синглтонами. Вместо этого вы хотите создать собственный ресурс. Затем вы можете вызывать этот ресурс несколько раз с разными входными данными (свойствами).

person coderanger    schedule 29.09.2016
comment
Арг, единственный способ сделать это LWRP? Есть ли способ заставить повара сделать это? Я видел что-то под названием include_recipe_now, похоже, оно может делать то, что я хочу. - person red888; 30.09.2016
comment
Нет, now поваренная книга предназначена для того, чтобы возиться с компиляцией и конвергенцией, а это совсем не то, что вам нужно. Технически это возможно, но это ломает все виды вещей до такой степени, что я не собираюсь рассказывать вам, как :P Возьмите свой существующий код рецепта и вставьте его в блок действий пользовательского ресурса, это не должно быть так уж сложно. . Затем замените все, что должно измениться, со свойствами (например, node['foo'] -> new_resource.foo и добавьте property :foo вверху файла). Затем создайте новый файл рецепта, чтобы несколько раз вызывать ваш пользовательский ресурс с атрибутами узлов в качестве входных данных. - person coderanger; 30.09.2016
comment
Могу ли я использовать определения для этого? Из того, что я читаю, определение создаст оболочку, которая объединяет один или несколько других ресурсов. Кажется, они тоже служат этой цели? Преимущества одного над другим? Определения кажутся более простыми. - person red888; 30.09.2016
comment
Раньше определения были проще, сейчас нет причин их использовать :) ознакомьтесь с новым синтаксисом 12.5 для пользовательских ресурсов, это очень просто - person coderanger; 01.10.2016