2015-12-29 1 views
2

поваренной/библиотеки/rn_helper.rb:Использование помощника с провайдером менее, 12,5-стиль пользовательского ресурса (LWRP) в Chef

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 - нет файла провайдера. Все описано в самом ресурсе.

Как я могу «модулизовать» мои помощники, используя синтаксис настраиваемого ресурса нового стиля?

ответ

0

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

Вы должны быть в состоянии сделать это, добавив extend SampleModule в качестве первой строки внутри блока действий.

+0

работоспособным, но с использованием 'action_class', вероятно, намного яснее. – coderanger

1

Вы можете получить доступ к внутреннему «класс действия», чтобы добавить методы:

action_class do 
    include SampleModule 
end 
+0

Модули FYI включили этот способ работы в действия, но не доступны для '' load_current_value'' метода. Однако вы можете '' расширять SampleModule'' внутри этого метода. –