我正在尝试编写我的第一个自定义资源。但是,我无法访问某些其他嵌入资源中的属性。
我创建了以下资源
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
答案 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
我仍然很高兴知道为什么会有效......