第 4 章 配置
本章介绍了如何提供 OpenStack Puppet 模块添加的内容。其中包括一些有关开发 Puppet 模块的基本指南。
4.1. 了解 Puppet 基础知识 复制链接链接已复制到粘贴板!
以下部分提供了一些基本知识,可帮助您了解 Puppet 的语法和 Puppet 模块的结构。
4.1.1. 检查 Puppet 模块的分析 复制链接链接已复制到粘贴板!
在贡献 OpenStack 模块之前,我们需要了解创建 Puppet 模块的组件。
- manifests
清单是包含定义一组资源及其属性的代码的文件。资源是系统的可配置部分。资源示例包括软件包、服务、文件、用户和组、SELinux 配置、SSH 密钥身份验证、cron 作业等。清单使用一组键值对为其属性定义每个所需的资源。例如:
package { 'httpd': ensure => installed, }
package { 'httpd': ensure => installed, }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此声明检查是否安装了 httpd 软件包。如果没有,则清单将执行 yum 并安装它。清单位于模块的 manifest 目录中。Puppet 模块也使用测试目录来测试清单。这些清单用于测试官方清单中包含的特定类。
- 类
- 类充当在清单中统一多个资源的方法。例如,如果安装和配置 HTTP 服务器,您可以创建具有三个资源的类:一个用于安装 HTTP 服务器软件包,一个用于配置 HTTP 服务器,一个用于启动或启用服务器。您还可以引用其他模块的类,以应用其配置。例如,如果要配置需要 webserver 的应用程序,您可以参考前面提到的 HTTP 服务器的类。
- static 文件
模块可以包含静态文件,供 Puppet 复制到您系统上的某个位置。这些位置和其他属性(如权限)通过清单中的 file 资源声明来定义。
静态文件位于模块的 files 目录中。
- templates
有时配置文件需要自定义内容。在这种情况下,用户会创建一个模板而不是静态文件。与静态文件一样,模板在清单中定义,并复制到系统的位置。区别在于,模板允许 Ruby 表达式定义自定义内容和变量输入。例如,如果要使用自定义端口配置 httpd,则配置文件的模板将包括:
Listen <%= @httpd_port %>
Listen <%= @httpd_port %>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例中,
httpd_port
变量在引用此模板的清单中定义。模板位于模块的 templates 目录中。
- plugins
插件允许扩展到 Puppet 核心功能的各个方面。例如,您可以使用插件来定义自定义事实、自定义资源或新功能。例如,数据库管理员可能需要 PostgreSQL 数据库的资源类型。这有助于在安装 PostgreSQL 后,数据库管理员为 PostgreSQL 填充一组新数据库。因此,数据库管理员需要创建一个 Puppet 清单,确保 PostgreSQL 安装和数据库会在之后创建。
插件位于模块的 lib 目录中。这包括一组子目录,具体取决于插件类型。例如:
-
用于自定义事实的
/lib/facter
- Location。 -
用于自定义资源定义的
/lib/puppet/type
- Location,它概述了属性的键值对。 -
/lib/puppet/provider
- Location 用于自定义资源提供程序,它们与用于控制资源的资源类型定义一同使用。 -
用于自定义功能的
/lib/puppet/parser/functions
- Location。
-
用于自定义事实的
4.1.2. 安装服务 复制链接链接已复制到粘贴板!
有些软件需要软件包安装。这是 Puppet 模块可以执行的一个功能。这需要一个资源定义,用于定义特定软件包的配置。
例如,要通过 mymodule
模块安装 httpd
软件包,您要将以下内容添加到 mymodule
模块中的 Puppet 清单中:
class mymodule::httpd { package { 'httpd': ensure => installed, } }
class mymodule::httpd {
package { 'httpd':
ensure => installed,
}
}
此代码定义了一个名为 httpd
的 mymodule
的子类,然后为 httpd
软件包定义 package 资源声明。ensure => installed
属性告知 Puppet 检查软件包是否已安装。如果没有安装,Puppet 将执行 yum
进行安装。
4.1.3. 启动和启用服务 复制链接链接已复制到粘贴板!
安装软件包后,您可能需要启动该服务。使用另一个名为 service
的资源声明。这需要使用以下内容编辑清单:
这可实现以下几项:
-
ensure => running
属性检查服务是否在运行。如果没有,Puppet 会启用它。 -
enable => true
属性将服务设置为在系统引导时运行。 -
require => Package["httpd"]
属性定义了一个资源声明和另一个资源之间的排序关系。在这种情况下,它会确保 httpd 服务在安装 httpd 软件包后启动。这会在服务及其对应软件包之间创建一个依赖项。
4.1.4. 配置服务 复制链接链接已复制到粘贴板!
前面的两个步骤演示了如何通过 Puppet 安装和启用服务。但是,您可能旨在为服务提供一些自定义配置。在我们的示例中,HTTP 服务器已在 /etc/httpd/conf/httpd.conf
中提供一些默认配置,它在端口 80 上提供 Web 主机。本节添加了一些额外的配置,以便在用户指定的端口上提供额外的 Web 主机。
为此,您可以使用模板文件来存储 HTTP 配置文件。这是因为用户定义的端口需要变量输入。在模块的 templates
目录中,您将添加一个名为 myserver.conf.erb
的文件,其中包含以下内容:
此模板遵循 Apache Web 服务器配置的标准语法。唯一的区别是包括 Ruby 转义字符,以便从我们的模块中注入变量。例如,httpd_port
用于指定 Web 服务器端口。
另请注意包含 fqdn
,它是一个存储系统完全限定域名的变量。这称为 系统事实。在生成各个系统的 Puppet 目录之前,从每个系统收集系统事实。Puppet 使用
命令收集这些系统事实,您也可以运行事实来查看这些事实的列表。
facter
保存此文件后,您要将资源添加到模块的 Puppet 清单:
这可实现以下目标:
-
我们为服务器配置文件添加 file 资源声明(
/etc/httpd/conf.d/myserver.conf
)。此文件的内容是我们之前创建的myserver.conf.erb
模板。在添加此文件之前,我们还检查httpd
软件包已经安装。 -
我们还会添加第二个 file 资源声明。这个目录会为我们的 web 服务器创建一个目录(
/var/www/myserver
)。 -
我们还使用
notify => Service["httpd"] 属性在配置文件和 httpd
服务之间添加关系。这会检查我们的配置文件是否有任何更改。如果文件已更改,Puppet 将重新启动服务。