《Puppet实战手册》——2.2 使用社区推荐的Puppet风格

简介: 如果其他人需要阅读或维护你的配置清单,或者如果读者想通过社区分享自己的代码,那么尽可能密切地按照现有风格、规范进行代码编写会是一个很好的主意。这些会在代码的布局、间距、引号、对齐方式和变量引用等方面进行约束

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

2.2 使用社区推荐的Puppet风格

如果其他人需要阅读或维护你的配置清单,或者如果读者想通过社区分享自己的代码,那么尽可能密切地按照现有风格、规范进行代码编写会是一个很好的主意。这些会在代码的布局、间距、引号、对齐方式和变量引用等方面进行约束,Puppet实验室官方在风格上的建议可以参考http://docs.puppetlabs.com/guides/style_guide

工作原理
本节会向读者展示一些更加重要的例子,以及如何确保代码是遵循风格规范的。

缩进
配置清单中使用两个空格(不要使用Tab)进行缩进,可参考下面的代码:

node 'monitoring' inherits 'server' {
 include icinga::server
 include repo::apt
}

引号
资源名字要始终使用引号注明,如下:

package { 'exim4':
而非如下所示:

package { exim4:
所有的字符串都使用单引号,除非:

字符串中引用了变量(如${name});
字符串中包含了转义序列(如n)。
在这些情况下,应该使用双引号。除非变量引用或转义序列在双引号内,否则Puppet会不处理它们。

在Puppet中要始终将非保留字的参数值用引号引起来。例如,下面的值都是非保留字:

name => 'Nucky Thompson',
mode => '0700',
owner => 'deploy',

但是,下面这些为保留字的参数值则不需要引号:

ensure => installed,
enable => true,
ensure => running,

变量
当字符串中引入变量时,要确保它们的名字被大括号({})括起来,如下:

source => "puppet:///modules/webserver/${brand}.conf",
否则,Puppet的语法分析器就不得不猜测哪些字符是变量名,哪些属于外围的字符串。而大括号能够帮助语法分析器明确这些语义。

参数
确保在声明参数的行尾加上逗号,即便在最后一个参数的行尾。

service { 'memcached':
 ensure => running,
 enable => true,
}

这种方式是Puppet允许的,并且它会在用户将来增加参数或是调整参数顺序时变得更加容易。

当声明一个仅仅带有一个参数的资源时,要把全部声明写在一行,并且不要在参数行尾添加逗号。

··package { 'puppet': ensure => installed }··
而在那些多个参数的声明代码中,需要让每一个参数各占据一行。

package { 'rake':
 ensure  => installed,
 provider => gem,
 require => Package['rubygems'],
}

为了使代码更容易阅读,所有的参数箭头要与最长参数名所在行的参数箭头对齐,如下所示:

file { "/var/www/${app}/shared/config/rvmrc":
 owner  => 'deploy',
 group  => 'deploy',
 content => template('rails/rvmrc.erb'),
 require => File["/var/www/${app}/shared/config"],
}

箭头对齐应该在每个资源内部保持一致,而不是在整个文件中,否则会使用户难以从一个文件中剪切代码粘贴到另一个文件。

符号链接
当声明的file资源是符号链接这种类型时,要设置ensure => link及target属性,如下所示:

file { '/etc/php5/cli/php.ini':
 ensure => link,
 target => '/etc/php.ini',
}

更多参考
当存在多人同时操作代码库时,很容易因为风格不一致而导致混乱。幸运的是,有一个工具可以自动检查代码是否符合风格指南,这个工具就是puppet-lint。在下一节,读者将看到如何使用这个工具。

相关文章
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2120 0
|
Ruby
《Puppet实战手册》——2.12 使用正则表达式进行替换
Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
2034 0
|
Linux Spring Java
《Puppet实战手册》——2.11 使用in运算符
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.11节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1517 0
|
Ubuntu Linux Ruby
《Puppet实战手册》——2.10 使用选择器和case语句
Puppet会比较$::operatingsystem和每个所提供的可能的值:Ubuntu、Debian等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1351 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2256 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1700 0
|
存储
《Puppet实战手册》——2.7 数组中多个元素的遍历
当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。
1961 0
|
Ruby 调度
《Puppet实战手册》——2.6 使用内联模板
任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。
1632 0
|
网络安全 Apache Ruby
《Puppet实战手册》——2.5 使用标准的命名约定
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.5节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1494 0
|
Apache 缓存
《Puppet实战手册》——2.4 使用模块
模块是将相关的事物进行组合的一种简单方式。例如,一个webserver模块应该包括让一台机器作为Web服务器所必需的一切:Apache的配置文件、虚拟主机模板和一些必要的用来部署它们(Apache的配置文件、虚拟主机模板)的Puppet代码。
1596 0