如何使用未来的解析器在子模板中包含子模板

问题描述 投票:1回答:1

在我们从Puppet 3.5.7升级之前以及从以下方面汇总信息之后:

How to include a subtemplate in a Puppet template

我可以在文件名中引用一个带有一些变量的子模板,如下所示:

<%= scope.function_template([File.dirname(__FILE__) + "/" + "subtemplate_" + @oscar_package + ".properties.erb"]) %>

启用未来的解析器后,我收到以下错误:

错误:无法从远程服务器检索目录:SERVER上的错误400:评估错误:评估函数调用时出错,无法解析模板oscar_mysql_tomcat / context / oscar_demo15.properties.e rb: Filepath:org / jruby / RubyString.java行:1172 细节:无法在节点bcmdit-devel-536-puppetclient上的/etc/puppet/environments/development/modules/oscar_mysql_tomcat/manifests/context.pp:11:18将nil转换为String警告:未在失败目录上使用缓存错误:无法检索目录;跳过运行

它在@oscar_package的解析失败了,我如何做未来的解析器方式?

更新1

咨询后:https://puppet.com/docs/puppet/5.4/lang_template_erb.html#calling-puppet-functions-from-templates似乎我应该使用scope.call_function:

<%= scope.call_function('template', [File.dirname(__FILE__) + "/" + "subtemplate_" + @oscar_package + ".properties.erb"]) %>

这会产生相同的错误。

templates puppet upgrade erb
1个回答
1
投票

我正在使用的类是另一个类的子节点,其中定义了oscar_package变量。

它是通过将变量传递给子类来解决的,因此可以在调用erb模板中的函数的范围内直接访问它。

所以在init.pp定义中,相关的代码是:

if $sys_report::active_database_context_list != "" {
  oscar_mysql_tomcat::context { "active_${sys_report::active_database_context_list}":
    db_name               => "$sys_report::active_database_context_list",
    oscar_package         => "$oscar_package",
    oscar_package_build   => "$oscar_package_build",
    role                  => "link",
    tomcat_site_seal      => "$tomcat_site_seal",
    tomcat_host_fqdn      => "$tomcat_host_fqdn",
    tomcat_port           => "$tomcat_port",
    twitter_feed          => "$twitter_feed",
    require               => File['/etc/sys-report.var'],
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.