Я новичок как в Chef, так и в Ruby, и я использую несколько скриптов для их изучения. Теперь я столкнулся с проблемой организации кода: я создал класс в каталоге библиотеки и использовал настраиваемое пространство имен для поддержания порядка. Это упрощенный пример моего файла:
# ~/chef-repo/cookbooks/mytest/libraries/MyTools.rb
module Chef::Recipe::EP
class MyTools
def self.print_something( text )
puts "This is my text: #{text}"
end
def self.copy_file( dir, file )
cookbook_file "#{dir}/#{file}" do source "#{dir}/#{file}" end
end
end
end
Из своего рецепта я вызываю оба метода:
# ~/chef-repo/cookbooks/mytest/recipes/default.rb
EP::MyTools.print_something "Hello World!"
EP::MyTools.copy_file "/etc", "passwd"
print_something работает нормально, но с copy_file я получаю эту ошибку:
undefined method `cookbook_file' for Chef::Recipe::EP::FileTools:Class
Мне ясно, что я не знаю, как создавать библиотеки в Chef, или не знаю некоторых основных предположений. Кто-нибудь может мне помочь? Я ищу решение этой проблемы (систематизируйте свой код, библиотеки, использую ресурсы в классах) или, что лучше, хорошую документацию Chef, поскольку я считаю, что документация очень нечеткая и дезорганизованная, так что исследование с ее помощью является болью.
Сообщение об ошибке означает, что в вашем классе нет метода cookbook_file. Имена модулей не подразумевают наследования классов, они просто предоставляют изолированные пространства имен. Если вам нужен доступ к методам Chef, вам необходимо создать подкласс соответствующего класса Chef. Изучение Ruby и Chef - это непросто проглотить за один присест. Написание эффективной библиотеки займет некоторое время и по большей части не требуется.
Рабочий процесс в Chef еще не стандартизирован. Существует множество различных подходов, которые все еще борются за лучшие практики.
Однако я бы посоветовал вам начать с Berkshelf. Он создаст для вас базовую структуру поваренной книги.
Учебник для berkshelf (не могу опубликовать реальный URL из-за ограничений)
misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/
Документация шеф-повара находится в процессе очистки. Есть несколько старых, довольно неполных документов, и трудно понять, какая из них актуальна. В настоящее время наибольшие усилия прилагаются к этому сайту: