本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.4节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.4 使用模块
能够使Puppet配置清单清晰并且易于维护的最重要的方式之一就是将它们组织成模块。
模块是将相关的事物进行组合的一种简单方式。例如,一个webserver模块应该包括让一台机器作为Web服务器所必需的一切:Apache的配置文件、虚拟主机模板和一些必要的用来部署它们(Apache的配置文件、虚拟主机模板)的Puppet代码。
把代码拆分成不同的模块可以使它们更易于复用和共享,这也是组织配置清单的最合理的方式。下例将创建一个模块来管理memcached(一款在Web应用程序中非常常用的内存缓存系统)。
操作步骤
下面这些步骤向读者展示了如何创建一个示例模块。
1. 在Puppet代码仓库中创建下面的这些目录:
ubuntu@cookbook:~/puppet$ mkdir modules/memcached
ubuntu@cookbook:~/puppet$ mkdir modules/memcached/manifests
ubuntu@cookbook:~/puppet$ mkdir modules/memcached/files
2. 参考如下内容创建modules/memcached/manifests/init.pp文件:
# Manage memcached
class memcached {
package { 'memcached':
ensure => installed,
}
file { '/etc/memcached.conf':
source => 'puppet:///modules/memcached/memcached.conf',
owner => 'root',
group => 'root',
mode => '0644',
require => Package['memcached'],
}
service { 'memcached':
ensure => running,
enable => true,
require => [Package['memcached'],
File['/etc/memcached.conf']],
}
}
3. 参考如下内容,创建modules/memcached/files/memcached.conf文件:
-m 64
-p 11211
-u nobody
-l 127.0.0.1
4. 把下面的内容加入nodes.pp文件中:
node 'cookbook' {
include memcached
}
5. 运行Puppet来检查新配置是否生效:
ubuntu@cookbook:~/puppet$ papply
Notice: /Stage[main]/Memcached/Package[memcached]/ensure:
created
Notice: /Stage[main]/Memcached/File[/etc/memcached.conf]/content:
content changed '{md5}58c9e04b29e08c2e9b3094794d3ebd0e'
to '{md5}9429eff3e3354c0be232a020bcf78f75'
Notice: Finished catalog run in 4.54 seconds
6. 检查memcached服务是否已经运行。
ubuntu@cookbook:~/puppet$ service memcached status
* memcached is running
工作原理
模块具有特定的目录结构。但并非所有这些目录都必须存在。如果它们存在的话,则应该按照这样的结构进行组织。
modules/
MODULE_NAME/
files/
templates/
manifests/
所有的配置清单文件(那些包含Puppet代码的文件)都要放在配置清单目录中。在上面的例子中,memcached的类被定义在文件manifests/init.pp中,这个文件会在Puppet运行时自动导入。
在memcached类中,引用了memcached.conf文件。
file { '/etc/memcached.conf':
source => 'puppet:///modules/memcached/memcached.conf',
}
正如读者在关于Puppet的文件服务器以及自定义挂载点那一章所了解的那样,source参数的值告知Puppet要在下面的目录中寻找文件:
MODULEPATH/
memcached/
files/
memcached.conf
更多参考
要尝试学习喜欢“模块”,因为它们会让你的Pupept生涯轻松许多。它们并不复杂。然而,更多的实践和经验将有助于判断配置代码何时应组合成模块,以及如何更好地组织模块结构。这里有一些可以快速进步的技巧。
模板
如果需要在一个模块中使用模板,可将其放置在模块的templates目录,并在代码中引用它,如下所示:
file { '/etc/memcached.conf':
content => template('memcached/memcached.conf.erb'),
}
Puppet就会在下面的目录中找到它:
MODULEPATH/
memcached/
templates/
memcached.conf.erb
fact、函数、类型和提供者
模块还可以包含自定义的fact、自定义函数、自定义类型和提供者。有关这些内容的更多信息,可参阅第8章。
自动生成模块布局
用户还可以使用puppet module generate命令为新模块生成目录结构,而不是手动创建。更多细节可参阅第8章。
第三方模块
用户可以下载由其他人提供的模块,并像自己创建的模块一样在配置清单中使用它们。欲了解更多关于此方面的信息,可参阅8.10节。