📅  最后修改于: 2020-10-31 14:05:49             🧑  作者: Mango
在Puppet中,模块可以定义为资源,类,文件,定义和模板的集合。 Puppet支持轻松重新分配模块,这对代码的模块化非常有帮助,因为一个人可以编写指定的通用模块,并且只需很少的简单代码更改就可以多次使用它。例如,这将启用/ etc / puppet下的默认站点配置,而Puppet附带的模块则位于/ etc / share / puppet中。
在任何Puppet模块中,我们都有两个分区来帮助定义代码的结构和控制名称。
使用puppetmasterd或masterd中的冒号分隔的目录列表来配置模块的搜索路径, puppet的主配置文件的后面部分使用modulepath参数。
[puppetmasterd]
...
modulepath = /var/lib/puppet/modules:/data/puppet/modules
可以在运行时通过设置PUPPETLAB环境变量来添加搜索路径,该环境变量也必须是用冒号分隔的变量列表。
fileserver.conf中文件服务器模块的访问控制设置,始终忽略该模块的路径配置,并且指定路径将产生警告。
Puppet支持用于存储模块的其他位置。任何模块都可以存储在任何特定计算机的不同文件系统中。然而,所有其中模块存储在路径必须在称为ModulePath进行配置变量这是在一般被指定,路径变量,其中木偶扫描所有模块的目录和负载起来时,它正在启动。
合理的默认路径可以配置为-
/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清单文件。此清单文件是默认文件,该文件首先在任何特定模块中执行,并且包含与该特定模块关联的所有类的集合。可以直接在manifests文件夹下添加其他.pp文件。如果要添加其他.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
人偶遵循预定义的结构,其中它在已定义的结构中包含多个目录和子目录。这些目录包含模块执行某些操作所需的不同类型的文件。幕后的魔术可以确保正确的文件与正确的上下文相关联。所有模块搜索都在modulepath(以冒号分隔的目录列表)内。
对于文件服务器上的文件引用,使用类似的引用,以便对p的引用://$servername/modules/autofs/auto.homes解析为模块路径中的文件autofs / files / auto.homes。
为了使模块既可用于命令行客户端又可用于人偶主机,可以使用from puppet:/// path的URL。即没有显式服务器名称的URL。 Puppet和puppetd对此类URL的处理略有不同。 Puppet在本地文件系统中搜索无服务器URL。
模板文件的搜索方式类似于清单文件和文件:提及模板(“ autofs / auto.master.erb”)将使人偶大师首先在$ templatedir / autofs / auto.master.erb中寻找文件,然后模块路径上的autofs / templates / auto.master.erb 。使用Puppet下所有内容的Puppet版本,即可使用。这称为模块自动加载。 Puppet将尝试从模块自动加载类和定义。