使用标准的命名规范
当你维护代码时会发现,选择适当而有意义的信息为你的模块或类命名是有很大帮助的。 尤其是当其他人需要阅读或基于你编写的配置清单工作时,这种命名方法是十分必要的。
操作步骤
模块应该以被管理的软件或服务命名,例如:
apache
或haproxy
。用跟在模块之后的功能或提供的服务为模块中的类命名,例如:
apache::vhosts
或rails::dependencies
。如果在模块中提供了禁用服务的功能,将其命名为
disabled
。例如一个禁用 Apache 的类应该命令为apache::disabled
。如果一个节点需要提供多种服务,请在节点的定义中包含一个类或者每个服务的类名。例如:
node server014 inherits server { include puppet::server include mail::server include repo::gem include repo::apt include zabbix }
管理用户的模块应该命名为
user
。在
user
模块中,声明虚拟用户的类应命名为user::virtual
。在
user
模块中,一个特定的用户组应该命名为子类,例如user::sysadmins
或user::contractors
。
当你需要覆盖某些特定节点或服务的类时,继承该类并以节点名作为子类名的前缀。 例如,如果节点
cartman
需要一个特殊的 SSH 配置且要覆盖ssh
类,可以这样做:class cartman_ssh inherits ssh { [ override config here ] }
当使用 Puppet 为不同的服务部署配置时,被 Puppet 解析后传出的文件应该以服务开头, 随后跟上指示文件功能的后缀。例如:
Apache
init
脚本 —apache.init
Rails 的日志滚动配置片段 —
rails.logrotate
Nginx 为
mywizzoapp
应用所做的vhost
配置 —mywizzoapp.vhost.nginx
独立运行的 MySQL 服务器的配置 —
standalone.mysql
如果你要管理不同的 Ruby 版本,可以使用添加了版本号的类名,表示由此类负责特定版本的管理, 例如
ruby192
或ruby186
。
更多用法
Puppet 社区维护着一套 Puppet 基础设施的最佳实践准则,其中包括对命名的提示: http://projects.puppetlabs.com/projects/1/wiki/Puppet_Best_Practice2 。
一些人更愿意在一个节点中使用逗号分割的列表包含多个类,而不是使用分离的 include
语句。例如:
node server014 inherits server { include puppet::server, mail::server, repo::gem, repo::apt, zabbix }
这是个风格问题,但我更愿意使用分离的 include
语句,一行包含一个模块或类, 因为这样可以更容易地在节点之间复制或移动,而无需每次都要整理逗号和缩进的问题。
我在前面的例子中曾几次提到过继承。如果你不知道这是什么,不要担心:我会在下一章详细解释。