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 %>

下一章:Puppet 自定义函数

Puppet 允许我们创建自定义函数。自定义函数有助于提升和扩展 Puppet 模块和清单文件的容量。我们知道,Puppet 提供了一个内置函数列表,但是如果你想对它的数据做一些修改编译目录时内置函数或与第三方服务 ...