🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 使用标准的命名规范 > There are only two hard problems in computer science: cache invalidation, naming things, and off-by-one errors. > > — Phil Karlton 当你维护代码时会发现,选择适当而有意义的信息为你的模块或类命名是有很大帮助的。 尤其是当其他人需要阅读或基于你编写的配置清单工作时,这种命名方法是十分必要的。 #### 操作步骤 1. 模块应该以被管理的软件或服务命名,例如:apache 或 haproxy。 用跟在模块之后的功能或提供的服务为模块中的类命名,例如:apache::vhosts 或 rails::dependencies。 如果在模块中提供了禁用服务的功能,将其命名为 disabled。例如一个禁用 Apache 的类应该命令为 apache::disabled。 2. 如果一个节点需要提供多种服务,请在节点的定义中包含一个类或者每个服务的类名。例如: ``` node server014 inherits server { include puppet::server include mail::server include repo::gem include repo::apt include zabbix } ``` 3. 管理用户的模块应该命名为 user。 1. 在 user 模块中,声明虚拟用户的类应命名为 user::virtual。 2. 在 user 模块中,一个特定的用户组应该命名为子类,例如 user::sysadmins 或 user::contractors。 4. 当你需要覆盖某些特定节点或服务的类时,继承该类并以节点名作为子类名的前缀。 例如,如果节点 cartman 需要一个特殊的 SSH 配置且要覆盖 ssh 类,可以这样做: ``` class cartman_ssh inherits ssh { [ override config here ] } ``` 5. 当使用 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](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 语句,一行包含一个模块或类, 因为这样可以更容易地在节点之间复制或移动,而无需每次都要整理逗号和缩进的问题。 我在前面的例子中曾几次提到过继承。如果你不知道这是什么,不要担心:我会在下一章详细解释。