Templates 对单个木偶清单中的不同文件使用单个erb模板

Templates 对单个木偶清单中的不同文件使用单个erb模板,templates,puppet,erb,Templates,Puppet,Erb,我喜欢使用单个erb模板创建不同的文件。这是我的雇员再培训局 # managed by puppet # changes will be overwritten # <% if (@tanuki_ssl != nil) -%> # config include # ssl section for trust and key stores # <% unless @tanuki_ssl['truststore_path'].nil? -%> wrapper.java.add

我喜欢使用单个erb模板创建不同的文件。这是我的雇员再培训局

# managed by puppet
# changes will be overwritten
#
<% if (@tanuki_ssl != nil) -%>
# config include
# ssl section for trust and key stores
#
<% unless @tanuki_ssl['truststore_path'].nil? -%>
wrapper.java.additional.940=-Djavax.net.ssl.trustStore=<%= @tanuki_ssl['truststore_path'] %>
<% end -%>
<% unless @tanuki_ssl['truststore_pass'].nil? -%>
wrapper.java.additional.941=-Djavax.net.ssl.trustStorePassword=<%= @tanuki_ssl['truststore_pass'] %>
<% end -%>
<% end -%>
<% if (@tanuki_proxy != nil) -%>
# config include
# proxy section
#
wrapper.java.additional.951=-Dhttp.proxySet=true
wrapper.java.additional.952=-Dhttp.proxyHost=<%= @tanuki_proxy['host'] %>
wrapper.java.additional.953=-Dhttp.proxyPort=<%= @tanuki_proxy['port'] %>
wrapper.java.additional.954=-Dhttp.nonProxyHosts=<%= @tanuki_proxy['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
wrapper.java.additional.955=-Dhttps.proxySet=true
wrapper.java.additional.956=-Dhttps.proxyHost=<%= @tanuki_proxy['host'] %>
wrapper.java.additional.957=-Dhttps.proxyPort=<%= @tanuki_proxy['port'] %>
wrapper.java.additional.958=-Dhttps.nonProxyHosts=<%= @tanuki_proxy['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
<% end -%>
我现在运行puppet,得到一个包含预期内容的文件940-ssl.incl。仅解释第一个if部分

但是文件950-proxy.inc也有ssl部分

那么,如何只传递每个文件所需的变量呢

干杯


Christian

无法将不同的变量传递给ERB
template()
函数,因此我认为您需要:

  • 使用with而不是ERB,这样可以在调用模板时将不同的局部变量传递到模板中
  • 使用不同的模板或不同的作用域。在同一范围内呈现同一模板通常应该呈现相同的结果,这正是您试图解决的问题

  • 我找到了另一种适合我的方法。我创建了一个定义:

    define tools::app::tanuki::include (
      Hash $property_hash      = {},
      String $include_template = 'tools/app/tanuki/wrapper.inc.erb',
      String $include_filename = $title,
    ){
      if $property_hash != {} {
        file { $include_filename:
          content  => template($include_template),
        }
      }
    }
    
    在我的木偶清单中,我修改了代码如下:

    if $tanuki_hash['ssl_enabled'] {
    
      $include_ssl = { type => 'ssl' }
      $tanuki_ssl_hash = merge($tanuki_hash['ssl'],$include_ssl)
    
      tools::app::tanuki::include { "${tanuki_path}/${dirname}/conf/940-ssl.inc":
        property_hash    => $tanuki_ssl_hash,
      }
    }
    
    if $tanuki_hash['proxy_enabled'] {
    
      $include_proxy = { type => 'proxy' }
    
      if $tanuki_hash['override_system_proxy'] {
        $tanuki_proxy=$tanuki_hash['proxy']
        $tanuki_proxy_hash = merge($tanuki_hash['proxy'],$include_proxy)
      } else {
        $tanunki_proxy=$proxy_hash
        $tanuki_proxy_hash = merge($proxy_hash,$include_proxy)
      }
    
      tools::app::tanuki::include { "${tanuki_path}/${dirname}/conf/950-proxy.inc":
        property_hash    => $tanuki_proxy_hash,
      }
    }
    
    所以我可以在erb上定义不同的包含,我稍微修改了一下

    # managed by puppet
    # changes will be overwritten
    #
    <% if (@property_hash['type'] == 'ssl') -%>
    # config include
    # ssl section for trust and key stores
    #
    <% unless @property_hash['truststore_path'].nil? -%>
    wrapper.java.additional.940=-Djavax.net.ssl.trustStore=<%= @property_hash['truststore_path'] %>
    <% end -%>
    <% unless @property_hash['truststore_pass'].nil? -%>
    wrapper.java.additional.941=-Djavax.net.ssl.trustStorePassword=<%= @property_hash['truststore_pass'] %>
    <% end -%>
    <% elsif (@property_hash['type'] == 'proxy') -%>
    # config include
    # proxy section
    #
    wrapper.java.additional.951=-Dhttp.proxySet=true
    wrapper.java.additional.952=-Dhttp.proxyHost=<%= @property_hash['host'] %>
    wrapper.java.additional.953=-Dhttp.proxyPort=<%= @property_hash['port'] %>
    wrapper.java.additional.954=-Dhttp.nonProxyHosts=<%= @property_hash['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
    wrapper.java.additional.955=-Dhttps.proxySet=true
    wrapper.java.additional.956=-Dhttps.proxyHost=<%= @property_hash['host'] %>
    wrapper.java.additional.957=-Dhttps.proxyPort=<%= @property_hash['port'] %>
    wrapper.java.additional.958=-Dhttps.nonProxyHosts=<%= @property_hash['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
    <% end -%>
    
    #由puppet管理
    #更改将被覆盖
    #
    #配置包括
    #用于信任和密钥存储的ssl部分
    #
    wrapper.java.additional.940=-Djavax.net.ssl.trustStore=
    wrapper.java.additional.941=-Djavax.net.ssl.trustStorePassword=
    #配置包括
    #代理部分
    #
    wrapper.java.additional.951=-Dhttp.proxySet=true
    wrapper.java.additional.952=-Dhttp.proxyHost=
    wrapper.java.additional.953=-Dhttp.proxyPort=
    wrapper.java.additional.954=-Dhttp.nonProxyHosts=||
    wrapper.java.additional.955=-Dhttps.proxySet=true
    wrapper.java.additional.956=-Dhttps.proxyHost=
    wrapper.java.additional.957=-Dhttps.proxyPort=
    wrapper.java.additional.958=-Dhttps.nonProxyHosts=||
    
    # managed by puppet
    # changes will be overwritten
    #
    <% if (@property_hash['type'] == 'ssl') -%>
    # config include
    # ssl section for trust and key stores
    #
    <% unless @property_hash['truststore_path'].nil? -%>
    wrapper.java.additional.940=-Djavax.net.ssl.trustStore=<%= @property_hash['truststore_path'] %>
    <% end -%>
    <% unless @property_hash['truststore_pass'].nil? -%>
    wrapper.java.additional.941=-Djavax.net.ssl.trustStorePassword=<%= @property_hash['truststore_pass'] %>
    <% end -%>
    <% elsif (@property_hash['type'] == 'proxy') -%>
    # config include
    # proxy section
    #
    wrapper.java.additional.951=-Dhttp.proxySet=true
    wrapper.java.additional.952=-Dhttp.proxyHost=<%= @property_hash['host'] %>
    wrapper.java.additional.953=-Dhttp.proxyPort=<%= @property_hash['port'] %>
    wrapper.java.additional.954=-Dhttp.nonProxyHosts=<%= @property_hash['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
    wrapper.java.additional.955=-Dhttps.proxySet=true
    wrapper.java.additional.956=-Dhttps.proxyHost=<%= @property_hash['host'] %>
    wrapper.java.additional.957=-Dhttps.proxyPort=<%= @property_hash['port'] %>
    wrapper.java.additional.958=-Dhttps.nonProxyHosts=<%= @property_hash['exceptions'].join('|') %>|<%= @ipaddress %>|<%= @hostname %>
    <% end -%>