第 2 章 从调度构建 Puppet 模块
本章介绍了如何构建和测试您自己的 Puppet 模块。这包括创建部署简单 Web 服务器配置的 Puppet 模块的基本教程。
2.1. 检查 Puppet 模块的 Anatomy
在创建模块之前,我们需要了解创建 Puppet 模块的组件。
- Puppet 清单
不要与清单 (订阅清单) 混淆。Puppet 清单是包含用于定义一组资源及其属性的代码的文件。资源是系统的任何可配置部分。资源示例包括软件包、服务、文件、用户和组、SELinux 配置、SSH 密钥身份验证、cron 作业等。清单使用一组键值对为其属性定义各个所需的资源。例如:
package { 'httpd': ensure => installed, }
package { 'httpd': ensure => installed, }
Copy to Clipboard Copied! 此声明检查是否安装了 httpd 软件包。如果没有,清单将执行
yum
并安装它。用于开始编译的 Puppet 清单称为"维护清单"或"站点清单"。
清单位于模块的 清单目录中。
Puppet 模块也使用 测试 目录来测试清单。这些清单用于测试官方清单中包含的特定类。
- 静态文件
模块可以包含 Puppet 可以复制到您系统上的特定位置的静态文件。这些位置和其他属性(如权限)通过清单中的
文件
资源声明进行定义。静态文件位于模块 的文件 目录中。
- 模板
有时配置文件需要自定义内容。在这种情况下,用户可以创建模板而不是静态文件。与静态文件一样,模板在清单中定义,复制到系统上的位置。不同之处在于,模板允许 Ruby 表达式定义自定义内容和变量输入。例如,如果要使用可自定义端口配置
httpd
,那么配置文件的模板会包括:Listen <%= @httpd_port %>
Listen <%= @httpd_port %>
Copy to Clipboard Copied! 本例中的
httpd_port
变量在引用此模板的清单中定义。模板位于模块的 templates 目录中。
- 插件
插件允许在 Puppet 的核心功能之外扩展方面。您可以使用插件来定义自定义事实、自定义资源或新功能。例如,数据库管理员可能需要 PostgreSQL 数据库的资源类型。这有助于数据库管理员在安装 PostgreSQL 后使用一组新数据库填充 PostgreSQL。因此,数据库管理员需要创建一个 Puppet 清单,以确保 PostgreSQL 安装和数据库之后创建。
插件位于模块的 lib 目录中。其中包括一组子目录,具体取决于插件类型。例如:
- /lib/facter - 自定义事实的位置。
- /lib/puppet/type - 自定义资源类型定义的位置,概述了属性的键值对。
- /lib/puppet/provider - 自定义资源提供程序的位置,与资源类型定义一同使用来控制资源。
- /lib/puppet/parser/functions - 自定义功能的位置。