2.5 使用标准的命名约定
为模块和类选择合适的和翔实的名称将为维护代码提供很大的帮助。如果其他人需要阅读和使用你的配置清单,更是如此。
操作步骤
下面是关于如何在配置清单中进行命名的一些技巧。
1. 以所管理的软件或服务为模块命名,如apache或haproxy。
2. 以提供的功能或服务为模块中的类命名,如apache::vhosts或rails::dependencies。
3. 如果模块中的一个类是为了禁用该模块提供的服务,可将其命名为disabled。例如,一个禁用Apache的类应该名为apache::disabled。
4. 如果一个节点提供多个服务,需要在节点定义中为每个服务包含一个模块或类,如下:
node 'server014' inherits 'server' {
include puppet::server
include mail::server
include repo::gem
include repo::apt
include zabbix
}
5. 用于管理用户的模块应命名为user。
6. 在user模块中,可在user::virtual类中声明虚拟用户(更多关于虚拟用户和其他资源,参见5.2节)。
7. 在user模块中,用于特定用户组的子类应以组命名,如user::sysadmins或者user::contractors。
8. 如果需要为某些特定节点或服务重写一个类(配置),可以把子类的名字作为前缀来继承那个类。例如,如果cartman节点(服务器)需要一个特殊的SSH配置,并且希望覆盖的之前的ssh类,可按如下所示进行操作。
class cartman_ssh inherits ssh {
[ override config here ]
}
9. 当使用Puppet为不同的服务部署配置文件时,应该以该服务为名命名配置文件,通过使用的后缀来表明它是什么样的文件,具体示例如下。
Apache初始化脚本:apache.init。
Rails的Logrotate配置片段: rails.logrotate。
mywizzoapp的Nginx vhost文件:mywizzoapp.vhost.nginx。
独立服务器的MySQL配置:standalone.mysql。
10.如果需要根据操作系统的不同发行版部署一个文件的不同版本,那么可以使用一个类似这样的命名约定。
memcached.lucid.conf
memcached.precise.conf
11.可以通过下面的方式让Puppet自动选择合适的版本:
source = > "puppet:///modules/memcached
/memcached.${::lsbdistrelease}.conf",
12.如果需要管理不同版本的Ruby,根据它(puppet类)管理的Ruby版本号为类命名是比较适合的,如ruby192或ruby186。
更多参考
Puppet社区维护着一套关于如何建设好Puppet基础设施的最佳实践准则,其中包括关于命名规范的一些提示:http://docs.puppetlabs.com/guides/best_practices.html
。
有些人更喜欢用逗号分隔列表的方式在一个节点上包含多个类,而不是使用单独的include语句,如下:
node 'server014' inherits 'server' {
include mail::server, repo::gem, repo::apt, zabbix
}
这和风格有一些关系,但笔者更喜欢使用单独的include语句,一行一个,因为它可以更容易地在节点(服务器)之间复制和移动类中包含的内容,而不必每次整理逗号和缩进。
本书在前面一系列例子中提到过继承,如果不知道继承是什么,不用担心,下一章会详细交代。