Использование помощника с пользовательским ресурсом в стиле 12.5 (LWRP) без поставщика в Chef
Поваренная книга / библиотеки /rn_helper.rb:
def sample_func
puts "woohoo"
end
Поваренная книга / ресурсы / rn.rb:
action :create do
sample_func
end
Приведенный выше код работает отлично. Код ниже не делает:
Поваренная книга / библиотеки /rn_helper.rb:
module SampleModule
def sample_func
puts "woohoo"
end
end
Поваренная книга / ресурсы / rn.rb:
extend SampleModule
action :create do
sample_func
end
Ошибка заключается в следующем: NameError: custom resource[usr.bin.foo] had an error: NameError: No resource, method, or local variable named 'sample_func' for 'LWRP resource some_resource from cookbook some_cookbook action provider "usr.bin.foo"'
Это новый пользовательский ресурс Chef 12.5 - файл провайдера отсутствует. Все описано в самом ресурсе.
Как я могу "модульно" свои помощники, используя новый стиль синтаксиса пользовательских ресурсов?
2 ответа
Вы можете получить доступ к внутреннему "классу действий", чтобы добавить методы:
action_class do
include SampleModule
end
Вы должны расширяться в блоке действий. При передаче блока, подобного этому, получается класс, отличный от класса верхнего уровня. Поскольку вы используете функцию в блоке, который дал этот класс, вам необходимо расширить этот класс, включив в него необходимые вам методы.
Вы должны быть в состоянии сделать это, добавив extend SampleModule
в качестве первой строки в блоке действий.