如何从模板访问Chef元数据

时间:2016-01-12 16:55:39

标签: chef

我可以通过run_context对象获取元数据,例如,将它们写入文件:

file '/etc/motd' do
  content "setup by [#{cookbook_name}] v#{run_context.cookbook_collection[cookbook_name].metadata.version}"
end

当我尝试在模板中执行相同操作时:

template 'etc/motd' do
  source 'default/motd.erb'
end

motd.erb模板文件如下:

generated by <%= run_context.cookbook_collection['cookbook_name'].metadata.version %>

我遇到错误,因为run_context不是TemplateContext的方法:

Chef::Mixin::Template::TemplateError (undefined local variable or method `run_context' for #<Chef::Mixin::Template::TemplateContext:0x00000002c70c20>) on line #2:

TemplateContext似乎没有提供任何方法来检索元数据。 有没有办法从那里访问run_context?

1 个答案:

答案 0 :(得分:3)

从技术上讲,你可以通过@node.run_context访问它,但我真的不会这样做。您正在使用5种不同的内部API,我们不做任何承诺,这不会在Chef升级中破坏。