- Puppet 教程
- Puppet - 首页
- Puppet 基础
- Puppet - 概述
- Puppet - 架构
- Puppet - 安装
- Puppet - 配置
- Puppet - 环境配置
- Puppet - Master
- Puppet - Agent 设置
- Puppet - SSL 证书设置
- r10K 的安装与配置
- Puppet - 设置验证
- Puppet - 代码风格
- Puppet - 清单文件
- Puppet - 模块
- Puppet - 文件服务器
- Puppet - Facter 与事实
- 高级 Puppet
- Puppet - 资源
- Puppet - 资源抽象层
- Puppet - 模板
- Puppet - 类
- Puppet - 函数
- Puppet - 自定义函数
- Puppet - 环境
- Puppet - 类型与提供程序
- Puppet - RESTful API
- Puppet - 实时项目
- Puppet 有用资源
- Puppet - 快速指南
- Puppet - 有用资源
- Puppet - 讨论
Puppet - 模板
模板化是一种以标准格式获取内容的方法,可以在多个位置使用。在 Puppet 中,模板化和模板使用 erb 支持,erb 是标准 Ruby 库的一部分,可以用于 Ruby 以外的其他项目,例如 Ruby on Rails 项目。作为标准实践,需要对 Ruby 有基本的了解。当用户尝试管理模板文件的内容时,模板化非常有用。当配置无法由内置的 Puppet 类型管理时,模板起着关键作用。
评估模板
模板使用简单的函数进行评估。
$value = template ("testtemplate.erb")
可以指定模板的完整路径,也可以提取 Puppet 的 templatedir 中的所有模板,templatedir 通常位于 /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> # You need something like 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 stuff with val1 Some stuff with val2 Some stuff with otherval
模板中的条件
erb 模板支持条件语句。以下结构是在文件中以快速简便的方式有条件地放置内容的方法。
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
模板和变量
除了填充文件内容外,还可以使用模板填充变量。
testvariable = template('/var/puppet/template/testvar')
未定义的变量
如果需要在使用变量之前检查变量是否已定义,则以下命令有效。
<% if has_variable?("myvar") then %> myvar has <%= myvar %> value <% end %>
超出范围的变量
可以使用 lookupvar 函数显式查找超出范围的变量。
<%= scope.lookupvar('apache::user') %>
示例项目模板
<#Autogenerated by puppet. Do not edit. [default] #Default priority (lower value means higher priority) priority = <%= @priority %> #Different types of backup. Will be done in the same order as specified here. #Valid options: rdiff-backup, mysql, command backups = <% if @backup_rdiff %>rdiff-backup, <% end %><% if @backup_mysql %>mysql, <% end %><% if @backup_command %>command<% end %> <% if @backup_rdiff -%> [rdiff-backup] <% if @rdiff_global_exclude_file -%> global-exclude-file = <%= @rdiff_global_exclude_file %> <% end -%> <% if @rdiff_user -%> user = <%= @rdiff_user %> <% end -%> <% if @rdiff_path -%> path = <%= @rdiff_path %> <% end -%> #Optional extra parameters for rdiff-backup extra-parameters = <%= @rdiff_extra_parameters %> #How long backups are going to be kept keep = <%= @rdiff_keep %> <% end -%> <% if @backup_mysql -%>%= scope.lookupvar('apache::user') %> [mysql] #ssh user to connect for running the backup sshuser = <%= @mysql_sshuser %> #ssh private key to be used sshkey = <%= @backup_home %>/<%= @mysql_sshkey %> <% end -%> <% if @backup_command -%> [command] #Run a specific command on the backup server after the backup has finished command = <%= @command_to_execute %> <% end -%>