《Puppet实战手册》——2.5 使用标准的命名约定

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

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

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语句,一行一个,因为它可以更容易地在节点(服务器)之间复制和移动类中包含的内容,而不必每次整理逗号和缩进。

本书在前面一系列例子中提到过继承,如果不知道继承是什么,不用担心,下一章会详细交代。

相关文章
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2207 0
|
Ruby
《Puppet实战手册》——2.12 使用正则表达式进行替换
Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
2066 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等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1386 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2286 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1732 0
|
存储
《Puppet实战手册》——2.7 数组中多个元素的遍历
当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。
2015 0
|
Ruby 调度
《Puppet实战手册》——2.6 使用内联模板
任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。
1669 0
|
Apache 缓存
《Puppet实战手册》——2.4 使用模块
模块是将相关的事物进行组合的一种简单方式。例如,一个webserver模块应该包括让一台机器作为Web服务器所必需的一切:Apache的配置文件、虚拟主机模板和一些必要的用来部署它们(Apache的配置文件、虚拟主机模板)的Puppet代码。
1629 0
|
JavaScript 前端开发
《Puppet实战手册》——2.3 使用puppet-lint检查配置清单
使用一些风格约定是很有必要的,特别是代码编写工作存在协同的情况下。除非彼此能够在空格、跳格(Tab)、引用、对齐等方面达成一致的标准,否则,代码将会被认为非常丑陋并且难以阅读和维护。
2039 0