🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 使用模块 你会对自己编写的 Puppet 代码感到羞愧吗?其他人看你的代码时会有恐惧感吗? 为了使你的 Puppet 配置清单更清晰且易于维护,一件最重要的事情就是将这些配置清单组织成 **模块(modules)**。 模块是对相关事物进行分组的一种简单方式;例如,一个 webserver 模块可能包含作为一个 Web 服务器所需的一切,包括 Apache 配置文件,虚拟主机配置模板以及部署这些所需的 Puppet 代码。 将配置清单拆分成模块易于代码的重用和共享;也是一种组织配置清单的最合乎逻辑的方式。 在本节中,我们将会创建一个管理 memcached 的模块,memcached 是一个 Web 应用程序常用的内存缓存系统。 #### 操作步骤 1. 在 puppet.conf 中查找你的模块路径,其默认值是 /etc/puppet/modules。 如果你像我前面建议的那样将 Puppet 配置清单纳入了版本控制, 那么就使用你的工作副本中的 modules 目录,之后再由他部署到 /etc/puppet/modules。 ``` # puppet --genconfig |grep modulepath modulepath = /etc/puppet/modules:/usr/share/puppet/modules ``` 在模块路径下创建一个名为 memcached 的子目录: ``` # cd /etc/puppet/modules # mkdir memcached ``` 在此目录中,创建 manifests 和 files 两个子目录: ``` # cd memcached # mkdir manifests files ``` 在 manifests 目录下,以如下内容创建 init.pp 文件: ``` class memcached { package { "memcached": ensure => installed, } file { "/etc/memcached.conf": source => "puppet:///modules/memcached/memcached.conf", } service { "memcached": ensure => running, enable => true, require => [ Package["memcached"], File["/etc/memcached.conf"] ], } } ``` 切换到 files 目录,以如下内容创建 memcached.conf 文件: ``` -m 64 -p 11211 -u nobody -l 127.0.0.1 ``` 2. 为了使用你的新模块,你的节点定义中添加如下的代码: ``` node cookbook { include memcached } ``` 3. 运行 Puppet 检测新配置: ``` # puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1300361964' notice: /Stage[main]/Memcached/Package[memcached]/ensure: ensure changed 'purged' to 'present' ... info: /Stage[main]/Memcached/File[/etc/memcached.conf]: Filebucketed /etc/memcached.conf to puppet with sum a977521922a151 c959ac953712840803 notice: /Stage[main]/Memcached/File[/etc/memcached.conf]/content: content changed '{md5}a977521922a151c959ac953712840803' to '{md5} f5c0bb01a24a5b3b86926c7b067ea6ba' notice: Finished catalog run in 20.68 seconds ``` 4. 检查新配置的服务是否正在运行: ``` # service memcached status * memcached is running ``` #### 工作原理 模块有特定的目录结构。并非所有子目录都要存在,但如果存在就该以如下的布局方式组织: ``` MODULEPATH/ `-- MODULE_NAME |-- files/ |-- templates/ |-- manifests/ |-- ... `-- README ``` 在 memcached.pp 文件中定义了 memcached 类, 它可以被 Puppet 自动导入。现在将其包含到节点中: ``` include memcached ``` 在 memcached 类中,引用了 memcached.conf 文件: ``` file { "/etc/memcached.conf": source => "puppet:///modules/memcached/memcached.conf", } ``` 正如我们在 [配置 Puppet 的文件服务器](#ch01sec04) 一节讲到的, 上面代码中的 source 参数告诉 Puppet 在如下的路径寻找文件: ``` MODULEPATH/ memcached/ files/ memcached.conf ``` #### 更多用法 学习喜欢模块的组织方式,使用模块将使你的 Puppet 管理生活便得更轻松。模块并不复杂。 然而,实践和经验会帮助你判断何时应该将事物划分并组织成模块,以及如何更好的安排你的模块结构。 如下所述的一些技巧会对你有所帮助。 ##### 模板 模板作为模块的一部分,如果你需要使用它,那么其放在 MODULE_NAME/templates 目录,参考如下的用法: ``` file { "/etc/memcached.conf": content => template("memcached/memcached.conf"), } ``` Puppet 会在如下目录搜索模板文件: ``` MODULEPATH/ memcached/ templates/ memcached.conf ``` ##### Fact、函数、类型和提供者 模板中也可以包含自定义 fact、自定义函数、自定义资源类型和自定义提供者。 关于这些内容的详细信息请参阅 [外部工具和 Puppet 的生态系统](#chapter09) 一章的内容。 ##### puppet-module 你也可以使用 puppet-module 工具为一个新模块创建目录布局,而不是使用手工方式。 请参考第 9 章的 [使用公共模块](#ch09sec08) 一节获得更详细的信息。 ##### 第三方模块 你可以下载由其他人开发的模块,并在你的配置清单中使用这些模块, 就像这些模块是你自己写的一样。 请参考第 9 章的 [使用公共模块](#ch09sec08) 一节获得更详细的信息。 ##### 模块的组织方法 有关如何组织模块的更多信息,参见 Puppet Labs 站点:http://docs.puppetlabs.com/guides/modules.html 。 #### 参见本书 * 第 1 章的 [配置 Puppet 的文件服务器](#ch01sec04) 一节 * 第 9 章的 [创建 Facter 的自定义 fact](#ch09sec01) 一节 * 第 9 章的 [使用公共模块](#ch09sec08) 一节 * 第 9 章的 [创建自定义的资源类型](#ch09sec10) 一节 * 第 9 章的 [创建自定义的提供者](#ch09sec11) 一节