- Puppet 教程
- Puppet - 主页
- 基础 Puppet
- Puppet - 概述
- Puppet - 架构
- Puppet - 安装
- Puppet - 配置
- Puppet - 环境配置
- Puppet - 主服务器
- Puppet - 代理设置
- Puppet - SSL 证书设置
- 安装和配置 r10K
- Puppet - 验证设置
- Puppet - 编码风格
- Puppet - 清单文件
- Puppet - 模块
- Puppet - 文件服务器
- Puppet - Facter 和事实
- 高级 Puppet
- Puppet - 资源
- Puppet - 资源抽象层
- Puppet - 模板
- Puppet - 类
- Puppet - 函数
- Puppet - 自定义函数
- Puppet - 环境
- Puppet - 类型和提供程序
- Puppet - RESTful API
- Puppet - 实时项目
- Puppet 有用资源
- Puppet - 快速指南
- Puppet - 有用资源
- Puppet - 讨论
Puppet - 模块
在 Puppet 中,模块可以定义为资源、类、文件、定义和模板的集合。Puppet 支持轻松地重新分发模块,这在代码模块化方面非常有用,因为人们可以编写指定的通用模块,并通过很少的简单代码更改多次使用它。例如,这将在 /etc/puppet 下启用默认站点配置,并使用 Puppet 自身提供的模块位于 /etc/share/puppet 中。
模块配置
在任何 Puppet 模块中,我们都有两个分区,它们有助于定义代码结构和控制命名。
模块的搜索路径使用 Puppet 主配置文件的 puppetmasterd 或 masterd 中的冒号分隔的目录列表进行配置,使用 modulepath 参数。
[puppetmasterd] ... modulepath = /var/lib/puppet/modules:/data/puppet/modules
文件服务器模块在 fileserver.conf 中的访问控制设置,该模块的路径配置始终被忽略,并且指定路径将产生警告。
可以通过设置 PUPPETLAB 环境变量在运行时添加搜索路径,该变量也必须是冒号分隔的变量列表。
模块源
Puppet 支持不同的模块存储位置。任何模块都可以存储在任何特定机器的不同文件系统中。但是,存储模块的所有路径都必须在称为 modulepath 的配置变量中指定,该变量通常是一个路径变量,Puppet 在其中扫描所有模块目录并在启动时加载它们。
可以配置一个合理的默认路径,如下所示:-
/etc/puppet/modules:/usr/share/puppet:/var/lib/modules.
或者,可以将 /etc/puppet 目录建立为一个特殊的匿名模块,始终首先搜索该模块。
模块命名
Puppet 遵循特定模块的相同命名标准,其中模块名称必须是普通单词,匹配 [-\\w+](字母、单词、数字、下划线和破折号),并且不包含命名空间分隔符:或 /。虽然在模块层次结构方面可能允许,但对于新模块,它不能嵌套。
模块内部组织
当用户在 Puppet 中创建新模块时,它遵循相同的结构,并包含清单、分布式文件、插件和模板,这些文件和模板按以下代码所示的特定目录结构排列。
MODULE_PATH/ downcased_module_name/ files/ manifests/ init.pp lib/ puppet/ parser/ functions provider/ type/ facter/ templates/ README
每当创建模块时,它都会在 manifests 目录内的指定固定位置包含 init.pp 清单文件。此清单文件是第一个在任何特定模块中执行的默认文件,并且包含与该特定模块关联的所有类的集合。其他 .pp 文件可以直接添加到 manifests 文件夹下。如果添加其他 .pp 文件,则应以类命名。
使用模块实现的关键特性之一是代码共享。从本质上讲,模块应该是自包含的,这意味着应该能够从任何地方包含任何模块并将其放到模块路径上,在 Puppet 启动时加载该模块。借助模块,人们可以在 Puppet 基础设施编码中获得模块化。
示例
考虑一个 autofs 模块,它安装固定的 auto.homes 映射并从模板生成 auto.master。
class autofs { package { autofs: ensure => latest } service { autofs: ensure => running } file { "/etc/auto.homes": source => "puppet://$servername/modules/autofs/auto.homes" } file { "/etc/auto.master": content => template("autofs/auto.master.erb") } }
文件系统将包含以下文件。
MODULE_PATH/ autofs/ manifests/ init.pp files/ auto.homes templates/ auto.master.erb
模块查找
Puppet 遵循预定义的结构,其中包含定义结构中的多个目录和子目录。这些目录包含模块执行某些操作所需的不同类型的文件。一些幕后操作确保将正确文件与正确的上下文关联。所有模块搜索都在 modulepath 内进行,modulepath 是冒号分隔的目录列表。
对于文件服务器上的文件引用,使用类似的引用,以便对 puppet: //$servername/modules/autofs/auto.homes 的引用解析为模块路径中的 autofs/files/auto.homes 文件。
要使模块可用于命令行客户端和 puppet master,可以使用来自 puppet:///path 的 URL,即没有显式服务器名称的 URL。此类 URL 由 Puppet 和 puppetd 处理方式略有不同。Puppet 在本地文件系统中搜索无服务器 URL。
模板文件的搜索方式类似于清单和文件:提及模板(“autofs/auto.master.erb”)将使 puppetmaster 首先在 $templatedir/autofs/auto.master.erb 中查找文件,然后在模块路径上的 autofs/templates/auto.master.erb 中查找。使用 Puppet 版本的所有内容都可以在 Puppet 下使用。这称为模块自动加载。Puppet 将尝试从模块自动加载类和定义。