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

Организуйте код в Chef: библиотеки, классы и ресурсы

Я новичок как в 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. Он создаст для вас базовую структуру поваренной книги.

http://berkshelf.com/

Учебник для berkshelf (не могу опубликовать реальный URL из-за ограничений)

misheska.com/blog/2013/06/16/getting-started-writing-chef-cookbooks-the-berkshelf-way/

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

https://learnchef.opscode.com/