嵌入式资源无法访问自定义资源中的chef属性?

时间:2017-02-08 14:50:01

标签: 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'

我正在使用chef-dk Chef Development Kit版本:1.1.16 chef-client版本:12.17.44 交付版本:master(83358fb62c0f711c70ad5a81030a6cae4017f103) berks版本:5.2.0 厨房版:1.14.2

2 个答案:

答案 0 :(得分:1)

问题在于web_app本身不是资源,而是一个定义。所以魔术范围的东西在那里不起作用。总的来说,无论如何都建议使用new_resource.whatever,因为融合模式范围魔法很容易出现脚趾。

答案 1 :(得分: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

我仍然很高兴知道为什么会有效......