在厨师自定义资源中获取调用食谱
get calling cookbook within chef custom resource
我有一本带有自定义资源 write_config
的食谱 my_service
。
此资源是从另一本食谱 node_a
.
调用的
my_service/resources/write_config.rb
:
property :template_source, String, name_property: true
property :calling_cookbook, String, required: true
action :create do
template "/tmp/test.txt" do
source template_source
cookbook calling_cookbook
owner 'root'
mode '0644'
action :create
end
end
节点食谱食谱node_a/default.rb
:
my_service_write_config 'config.erb' do
calling_cookbook 'node_a'
end
这很好用,但我想摆脱 calling_cookbook
属性。
有没有办法自动获取calling_cookbook
名字?
解决方案
(谢谢coderanger!)
基本资源 template
似乎在调用 (node_a
) 食谱 (?) 的上下文中得到评估。
my_service/resources/write_config.rb
:
property :template_source, String, name_property: true
action :create do
template "/tmp/test.txt" do
source template_source
owner 'root'
mode '0644'
action :create
end
end
在节点食谱食谱中使用它 node_a/default.rb
成为单行代码:
...
include_recipe 'my_service'
my_service_write_config 'config.erb'
...
整洁!
这被自动跟踪为 new_resource.cookbook_name
。您可能需要 to_s
它,因为它有时会以某种方式结束一个符号,但除此之外应该是您所需要的。
如果您只删除 cookbook
行,这也特别适用于模板,这已经是默认行为。
我有一本带有自定义资源 write_config
的食谱 my_service
。
此资源是从另一本食谱 node_a
.
my_service/resources/write_config.rb
:property :template_source, String, name_property: true property :calling_cookbook, String, required: true action :create do template "/tmp/test.txt" do source template_source cookbook calling_cookbook owner 'root' mode '0644' action :create end end
节点食谱食谱
node_a/default.rb
:my_service_write_config 'config.erb' do calling_cookbook 'node_a' end
这很好用,但我想摆脱 calling_cookbook
属性。
有没有办法自动获取calling_cookbook
名字?
解决方案
(谢谢coderanger!)
基本资源 template
似乎在调用 (node_a
) 食谱 (?) 的上下文中得到评估。
my_service/resources/write_config.rb
:property :template_source, String, name_property: true action :create do template "/tmp/test.txt" do source template_source owner 'root' mode '0644' action :create end end
在节点食谱食谱中使用它
node_a/default.rb
成为单行代码:... include_recipe 'my_service' my_service_write_config 'config.erb' ...
整洁!
这被自动跟踪为 new_resource.cookbook_name
。您可能需要 to_s
它,因为它有时会以某种方式结束一个符号,但除此之外应该是您所需要的。
如果您只删除 cookbook
行,这也特别适用于模板,这已经是默认行为。