Я пытаюсь лучше организовать некоторые рецепты Chef, собирая общую логику Ruby во вспомогательной библиотеке. Я видел примеры, объявляющие класс в библиотеке (например, класс Chef::Recipe::MyHelper) с несколькими повторно используемыми методами внутри. Я также видел примеры использования модуля аналогичным образом. В моем случае я хотел использовать ресурс внутри нескольких из этих методов.
Например, предположим, что я хочу предоставить вспомогательный метод, который принимает массив имен служб и в цикле останавливает каждое из них, используя ресурс службы. Я хочу максимально очистить файлы рецептов и сохранить часть этой логики, просто вызвав метод «stopServices (serviceList)».
Если я определяю вспомогательную библиотеку, например:
class Chef::Recipe::MyHelper
def self.stopServices(serviceList)
serviceList.each do |svc|
service "#{svc}" do
action :stop
end
end
end
end
Тогда в моем рецепте я использую:
MyHelper.stopServices(serviceList)
Я получаю сообщение об ошибке: «служба неопределенного метода для Chef::Recipe::MyHelper:Class».
Есть ли простой способ использовать ресурсы в такой библиотеке? (Содержит ли библиотека MyHelper как класс или модуль)? Это просто плохая практика, которую я нарушаю? Я много искал и не могу найти никого, кто спрашивал бы что-то подобное, что заставляет меня поверить, что я, вероятно, делаю что-то, чего не должен, поэтому любые альтернативные предложения также будут высоко оценены.