例子.pp
$foo = 'bar'
$content = template('mymodule/maintemplate.erb')
主模板.erb
<% bar = foo + "extra" %>
foobar = scope_function_template(['mymodule/subtemplate.erb'])
子模板.erb
<%# here i want to access the variable bar %>
<%= bar %>
有函数
<%= scope.lookupvar('::bar') %>
是否存在某种类型的parent::bar
erb 模板,或者我可以将一些变量传递给子模板,或者我只能使用 .pp 文件访问外部变量::foo
答案1
正如该错误报告/功能请求中所述:http://projects.puppetlabs.com/issues/6492有一个解决方法scope.setvar
<% bar = foo + "extra" %>
scope.unsetvar('bar')
scope.setvar('bar',bar)
这很丑但是似乎有效......
答案2
所以我读http://projects.puppetlabs.com/issues/6592#note-6可以使用 TemplateWrapper 并最终得到以下代码片段:
<%
newscope = scope.compiler.newscope(scope)
newscope.setvar(k, v)
wrapper = Puppet::Parser::TemplateWrapper.new(newscope)
wrapper.file = 'templatefile.erb'
%>
<%= wrapper.result %>