《Puppet实战手册》——2.6 使用内联模板

简介: 任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。

本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.6节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.6 使用内联模板

模板是一种使用嵌入式Ruby来帮助用户动态(如通过遍历数组)地建立配置文件的强大的方式。但是,用户仍然可以在清单中直接通过inline_template函数嵌入Ruby代码,而无须创建单独的模板文件。

操作步骤
下面是一个使用inline_template的例子。

在Puppet配置清单中将Ruby代码传递给inline_template函数,如下所示:

cron { 'chkrootkit':
 command => '/usr/sbin/chkrootkit >/var/log/chkrootkit.log 2>&1',
 hour  => inline_template('<%= @hostname.sum % 24 %>'),
 minute => '00',
}

工作原理
任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。

在这个例子中,使用inline_template来为每一台机器上的cron(一种调度作业)资源计算不同的执行时刻,以至于同样的作业不会同时在所有的机器上运行。要了解更多关于此技术,可参见5.6节。

更多参考
在ERB代码中,无论是在模板文件的内还是在inline_template的参数字符串中,只要它们是在当前作用域内有效,都可以直接通过前缀@加名称的方式访问Puppet变量。

<%= @name %>
如果它们在其他作用域中,那么可以使用scope.lookupvar来引用它们,如下所示。

<%= "The variable from otherclass is " + scope.lookupvar('otherclass:: variable') %>

应该谨慎地使用内联模板。如果一定要在配置清单中实现一些复杂的逻辑,可以考虑使用自定义函数来代替内联模板(见8.14节)。

相关文章
|
应用服务中间件 nginx Ruby
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2207 0
|
Ruby
《Puppet实战手册》——2.12 使用正则表达式进行替换
Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
2065 0
|
Linux Spring Java
《Puppet实战手册》——2.11 使用in运算符
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.11节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1546 0
|
Ubuntu Linux Ruby
《Puppet实战手册》——2.10 使用选择器和case语句
Puppet会比较$::operatingsystem和每个所提供的可能的值:Ubuntu、Debian等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1384 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2285 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1731 0