Puppet 模板
 
 
Puppet 模板
 
 模板是用一种特殊的语言编写的,可以从数据中生成文本。模板是收集代码、数据和文字文本以生成最终输出的文档。模板的主要目的是通过简单的输入处理文本的复杂部分。
 
 我们在 Puppet 中使用模板来处理配置文件的内容。
 
模板语言
 
 Puppet 支持两种模板语言: 
 
EPP(嵌入式 Puppet)在特殊标签中使用 Puppet 表达式。此语言适用于 Puppet 4.0 及更高版本。 
ERB(Embedded Ruby) 在标签中使用了 Ruby 代码,您必须具备一些 Ruby 知识。此语言支持所有 Puppet 版本。 
评估模板
 
 要评估模板,请使用以下函数: 
 
 
  
  $value = template ("testtemplate.erb") 
   
  
 我们可以定义一个模板的完整路径,也可以将所有模板拖到Puppet的templatedir中。 puppetdir 最常用的位置是/var/puppet/templates。我们可以通过运行 Puppet--configprint templatedir 来找到目录的位置。
 
 客户端不是评估模板;解析器对其进行评估。因此,如果您使用 puppetmasterd,您只需要在服务器上拥有模板,而无需将其下载到客户端。客户端对两者的处理方式相同,使用模板并将文件的所有内容定义为字符串。这表明 puppetmasterd 在 puppet 启动阶段首先发现了客户端特定的变量。
 
使用模板
 
 让我们看一个例子来生成 tomcat 配置测试站点: 
 
 
  
  define testingsite($cgidir, $tracdir) { 
   file { "testing-$name": 
   path => "/etc/tomcat/testing/$name.conf", 
   owner => superuser, 
   group => superuser, 
   mode => 644, 
   require => File[tomcatconf], 
   content => template("testsite.erb"), 
   notify => Service[tomcat] 
}  
   symlink { "testsym-$name": 
      path => "$cgidir/$name.cgi", 
      ensure => "/usr/share/test/cgi-bin/test.cgi" 
   } 
} 
   
  
 以下是模板定义: 
 
 
  
  <Location "/cgi-bin/ <%= name %>.cgi"> 
   SetEnv TEST_ENV "/export/svn/test/<%= name %>" 
</Location>  
# use this to authenticate users 
<Location "/cgi-bin/<%= name %>.cgi/login"> 
   AuthType Basic 
   AuthName "Test" 
   AuthUserFile /etc/tomcat/auth/svn 
   Require valid-user 
</Location>
 
   
  
 这会将每个模板文件推送到一个单独的文件中,然后我们需要告诉 Apache 加载这些配置文件: 
 
 
  
  include /etc/apache2/trac/[^.#]*
 
   
  
合并模板
 
 要合并两个模板,请使用以下命令: 
 
 
  
  template('/path/to/template1','/path/to/template2') 
   
  
模板中的迭代
 
 模板也支持 Puppet 中的数组迭代。
 
 
  
  $values = [val1, val2, otherval]
 
   
  
 我们有如下模板: 
 
 
  
  <% values.each do |val|-%> 
Some stuff with <%= val %> 
<% end-%>
 
   
  
 我们将得到以下输出: 
 
 
  
  Some statement with val1 
Some statement with val2 
Some statement with otherval
 
   
  
模板中的条件
 
 模板也支持条件。我们可以轻松地在文件中写入条件内容: 
 
 
  
  <% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>