2017-02-08 1 views
0

Я пытаюсь написать свой первый пользовательский ресурс повара. Однако я не могу получить доступ к свойствам в , а некоторые другие встроенные ресурсы -.Вложенный ресурс не может получить доступ к свойству chef в пользовательских ресурсах?

Я создал следующий ресурс

property :template_shortname, String 

action :setup do 
    node.set['apache']['version'] = '2.4' 
    node.set['apache']['package'] = 'apache2' 

    include_recipe "apache2::default" 

    print "the shortname is " + template_shortname 

    web_app "sample_app" do 
    server_name "server.com" 
    server_aliases [] 
    docroot "/www-data" 
    template "prefix " + template_shortname 
    end 
end 

Однако при выполнении этого я получаю:

Из журнала отладки

The shortname is: server 

Но параметр template_shortname содержит пустой массив. Так что квиты с:

 TypeError 
     --------- 
     no implicit conversion of Array into String 

     Cookbook Trace: 
     --------------- 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:21:in `+' 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:21:in `block (2 levels) in class_from_file' 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:17:in `block in class_from_file' 

Я использую шеф-повар Dk Development Kit Версия: 1.1.16 версия шеф-клиент: 12.17.44 доставка версия: мастер (83358fb62c0f711c70ad5a81030a6cae4017f103) Berks версия: 5.2. версия 0 кухни: 1.14.2

+0

префикс 'template '# {template_shortname}" 'использование интерполяции строк, а не добавление – Tensibai

+0

И, вероятно,' new_resource.template_shortname' из [doc] (https://docs.chef.io/custom_resources.html#new-resource -имущество). В общем, установка атрибутов, подобных этому, и вызов include_recipe с действием звучат хрупким и, скорее всего, укусят вас в ближайшее время. Thos должен быть в вашем файле атрибутов cookbook phpapp и рецепте, в общем, я не понимаю, что вы пытаетесь сделать здесь. – Tensibai

+0

Sry Я должен был упомянуть new_resource также пуст. Насколько я понимаю, это сообщение в блоге http://blog.backslasher.net/chef-custom-resources.html больше не требуется. Если я правильно читаю документ для шеф-повара, его нужно будет требовать только в случае конфликтов имен. – crasu

ответ

1

Вопрос заключается в том, что web_app не сам ресурс, это определение. Таким образом, волшебная область не работает. В целом рекомендуется использовать new_resource.whatever в любом случае, потому что магия режима плавного режима очень подвержена ногам.

0

Оказывается, что уравновешенность ресурс делает что-то подобное:

https://github.com/poise/application_php/blob/master/providers/mod_php_apache2.rb

Это работает:

new_resource = @new_resource 

    web_app "sample_app" do 
    server_name "server.com" 
    server_aliases [] 
    docroot "/www-data" 
    template "prefix " + new_resource.template_shortname 
    end 

я все еще был бы рад узнать, почему это работает ....

Смежные вопросы