Использование помощника с пользовательским ресурсом в стиле 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 в качестве первой строки в блоке действий.

Другие вопросы по тегам