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