2016-02-23 1 views
0

У меня есть LWRP, который должен создать cookbook_file внутри его create действияКак использовать Chef DSL в действии LWRP в

resource_name :vuy 
property :vu_name, String, name_property :true 
actions :create 

action :create do 
    log "vuy:@new_resource.vu_name-#{@new_resource.vu_name}" 
    cookbook_file "c:/temp/test.xml" do 
    source "#{@new_resource.vu_name}" 
    end 
end 

И тест рецепт

vuy 'text.txt' 

chef-client исполнение с ошибкой NoMethodError: undefined method 'vu_name' for nil:NilClass

Когда Я удаляю cookbook_file из create метод, журнал правильно показывает: На следующем этапе, я заменил

source "#{@new_resource.vu_name}" 

с таким же значением, как указано в тесте рецепт

source "text.txt" 

и файл был за уши. Для меня это выглядит так: cookbook_file Внутренний рубиновый блок не получает копию new_resource и становится nil.

Как использовать свойства LWRP в качестве аргументов ресурсов, объявленных внутри действия?

+0

В соответствии с вашим синтаксисом вы используете специальный ресурс шеф-повара 12.5+, просто удалите часть '@ new_resource' в соответствии с [документом здесь] (https://docs.chef.io/custom_resources.html) – Tensibai

+1

Это он. Я пропустил его, хотя я прочитал этот документ :-) –

ответ

0

Это должно быть new_resource.vu_name, то есть без @. С знаком at это локальный поиск переменных, без вызова метода. Шеф-повар автоматически продвигает вызов метода, так что даже внутри cookbook_file вы получаете правильную вещь, но это не может сделать это с помощью поиска переменных экземпляра.