Назад | Перейти на главную страницу

Многоразовый фрагмент кода в Chef для многократного использования в рецепте (ах)

Мне нужно повторно использовать какой-то сценарий в моих кулинарных книгах - создать несколько пользователей на одной машине и установить для каждого из них одно и то же программное обеспечение. Установка программного обеспечения - это повторяющаяся операция, которую я хотел бы разместить в одном месте и использовать повторно.

Я посмотрел на провайдеров, но у них есть метод load_current_resource который загружает текущее состояние система, У меня не может быть такого метода, потому что некоторые пользователи могли установить это программное обеспечение, другие - нет, и если Chef вызовет этот метод за сценой, у меня не будет контроля над тем, с каким конкретным пользователем я работаю в данный момент.

Я также посмотрел на Поваренная книга MySQL который помещает некоторый собственный код в libraries папка. Возможно, это лучший вариант для меня, но я не знаю, так ли это по-шефски или нет.

Итак, вопрос в том, каков способ шеф-повара помещать такие повторно используемые части кода, которые будут использоваться несколько раз по одному и тому же рецепту или несколькими из них.

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

Документы: http://docs.opscode.com/resource_common.html

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

Документы: http://docs.opscode.com/dsl_recipe_method_data_bag.html