Использование ресурса каталога внутри Chef Provider LWRP

Я пытаюсь использовать ресурс каталога в Chef LWRP, но не могу получить доступ к атрибуту внутри блока ресурсов, есть ли способ сделать это. Или я совершенно не прав, и для этого нужен другой подход.

my-cookbook/providers/default.rb

use_inline_resources

action :setup do
  directory node["#{@new_resource.name}"] do
    action :create
    not_if {node["#{@new_resource.name}"].include? "test"}
  end
end

@new_resource.name в строке not_if {node["#{@new_resource.name}"].include? "test"} оценивается как nilClass,

в то время как он правильно оценивается в строке directory node["#{@new_resource.name}"] do

Спасибо


person Shan    schedule 09.12.2016    source источник


Ответы (1)


Наконец-то нашел

При ссылке на переменную внутри другого ресурса нам нужно обращаться к ней без @.

action :setup do
  new_resource = @new_resource
  directory node["#{@new_resource.name}"] do
    action :create
    not_if {node["#{new_resource.name}"].include? "test"}
  end
end

Спасибо @stajkowski (GitHub)

person Shan    schedule 09.12.2016
comment
И вы не должны использовать интерполяцию, когда вы просто вызываете переменную. Кстати, ваш код здесь звучит очень странно, и, вероятно, есть другой подход к тому, что вам нужно... - person Tensibai; 12.12.2016
comment
Привет @Tensibai. Я надеюсь, что вы правы, было бы лучшее решение. Пример использования: у меня есть рецепт, который каждый раз нужно вызывать с разными атрибутами, и, поскольку шеф-повар не вызывает include_recipe более одного раза, я просто делаю рецепт LWRP (на самом деле это копия рецепта). ). Это длинный рецепт, я передал только один ресурс, чтобы объяснить свою проблему. Большое спасибо. - person Shan; 13.12.2016