💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 使用 ERB 模板 **模板**(**template**)是一种高级别的文本文件。它可以做计算、执行 Ruby 代码或者引用你在 Puppet 配置清单中定义的变量值。能被 Puppet 部署的任何一个文本文件,你都可以使用模板来代替。 最简单的情况,一个模板可以仅是一个静态文本文件。更有用的情况是,你可以使用 **ERB** (**嵌入式 Ruby**)语法在模板中插入变量。例如: ``` <%= name %>, this is a very large drink. ``` 如果模板使用了变量 $name,其值为 Zaphod Beeblebrox,模板将解析为: ``` Zaphod Beeblebrox, this is a very large drink. ``` 这种简单的技术非常有用,一种情形是要生成一批文件且它们仅有一两个变量的值不同 (例如虚拟主机的配置文件);另一种情形是要向一个脚本中插入值(例如数据库名或口令)。 在下面的例子中,我们将使用一个 ERB 模板插入口令到一个备份脚本。 #### 操作步骤 1. 使用下面的内容创建 /etc/puppet/modules/admin/templates/backup-mysql.sh 文件: ``` #!/bin/sh /usr/bin/mysqldump -uroot -p&lt;%= mysql_password %&gt; --all-databases \ | /bin/gzip &gt; /backup/mysql/all-databases.sql.gz ``` 2. 添加如下代码到你的配置清单: ``` $mysql_password = "secret" file { "/usr/local/bin/backup-mysql": content =&gt; template("admin/backup-mysql.sh"), mode =&gt; "755", } ``` 3. 运行 Puppet: ``` # puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1308670971' notice: /Stage[main]//Node[cookbook]/File[/usr/local/bin/backupmysql]/ ensure: defined content as '{md5}5853b6d4dd72420e341fa7ecb8 91ad43' notice: Finished catalog run in 0.96 seconds ``` 4. 检查 Puppet 是否已经在模板中正确地插入了口令: ``` # cat /usr/local/bin/backup-mysql ``` ``` #!/bin/sh /usr/bin/mysqldump -uroot -psecret --all-databases \ | /bin/gzip &gt; /backup/mysql/all-databases.sql.gz ``` #### 工作原理 在模板中,无论在哪里引用了变量(例如 &lt;%= mysql_password %&gt;), Puppet 都会使用相应的值(例如 secret)替换它。 #### 更多用法 在本例中,我们仅在模板中使用了一个变量,但是只要你需要可以引用许多变量。 它们也可以是对 facts 的引用,例如: ``` ServerName <%= fqdn %> ``` 或者使用 Ruby 表达式,例如: ``` MAILTO=<%= emails.join(',') %> ``` 或者你要使用的任何 Ruby 代码,例如: ``` ServerAdmin <%= sitedomain == 'coldcomfort.com' ? 'seth@coldcomfort.com' : 'flora@poste.com' %> ``` #### 参见本书 * 本章的 [在模板中遍历数组](#ch05sec05) 一节