📅  最后修改于: 2021-01-08 05:02:29             🧑  作者: Mango
人偶类型管理各个配置项。 Puppet提供了程序包类型,用户类型和服务类型。并且每种类型都支持提供程序。在Puppet中,有两类类型:
定义的类型:此类型用Puppet的DSL(特定于域的语言)编写。
define custom_user (
$ensure = present,
$home
) {
# ..omitting resources, composing custom_user.
}
在这里,custom_user是资源,而$ ensure和$ home是属性。可以使用此定义的类型而无需担心实现资源:
custom_user { 'ftp':
ensure => present,
home => '/var/lib/ftp',
}
本机类型:本机类型是用Ruby语言编写的。借助本机类型,我们可以确定资源接口,就像在与类型API集成的Puppet DSL中的关键字“ define”一样。
本机类型也称为Ruby类型。与定义的类型不同,Ruby类型依赖于提供程序来处理相应系统。
提供者在另一个平台或工具上处理配置管理。提供者实施该过程,并且这些过程用于管理资源。
资源具有属性的集合,提供者用于管理该资源。同样,我们可以为单个类型实现多个提供程序。这些提供程序允许将类似的资源应用于不同的OS。
对于任何本机类型,Puppet提供了几种不同的提供程序。例如,Puppet的用户类型具有八个提供程序,这些提供程序采用了跨各种Linux和Windows平台的支持。
包类型具有不同的提供程序,例如DMG,yum,aptitude和RPM。您可以通过以下命令在系统中查看软件包类型的提供程序列表:
$ ls ~/src/puppet/lib/puppet/provider/package/
aix.rb blastwave.rb macports.rb pkg.rb rpm.rb yum.rb
appdmg.rb dpkg.rb msi.rb pkgdmg.rb rug.rb yumhelper.py
apple.rb fink.rb nim.rb pkgutil.rb sun.rb zypper.rb
apt.rb freebsd.rb openbsd.rb portage.rb sunfreeware.rb
aptitude.rb gem.rb pacman.rb ports.rb up2date.rb
aptrpm.rb hpux.rb pip.r portupgrade.rb urpmi.rb
人偶类型和提供程序是用Ruby语言编写的。让我们创建一个称为repo的简单Puppet类型,以管理存储库和提供程序,例如SVN和Git。回购类型的第一个元素是类型本身,它们通常位于lib / puppet / type中或由模块分发。首先,创建一个名为repo.rb的文件。
$ touch repo.rb
并将以下内容复制到文件中:
Puppet::Type.newtype(:repo) do
@doc = "Manage repos"
ensurable
newparam(:source) do
desc "The repo source"
validate do |value|
if value =~ /^git/
resource[:provider] = :git
else
resource[:provider] = :svn
end
end
isnamevar
end
newparam(:path) do
desc "Destination path"
validate do |value|
unless value =~ /^\/[a-z0-9]+/
raise ArgumentError , "%s is not a valid file path" % value
end
end
end
end
在上面的代码中,我们创建了一个块,即Puppet :: Type.newtype(:repo) do,它创建了一个新类型,我们将其称为repo。我们提到了@doc,这是该类型的文档部分。我们还定义了创建基本“确保”属性的可保声明。puppet 类型使用此“确保”属性来获取配置项的状态。
例:
service { "sshd":
ensure => present,
}
sure语句将通知Puppet除提供程序中的三种方法外:
现在,指定这些方法的内容,Puppet围绕它们构建支持系统。
现在,定义一个名为source的新参数:
newparam(:source) do
desc "The repo source"
validate do |value|
if value =~ /^git/
resource[:provider] = :git
else
resource[:provider] = :svn
end
end
isnamevar
end
source参数将告知回购类型,该目录用于下载,克隆或搜索我们的源存储库。上面的脚本指出了source参数是否以git开头,然后使用Git提供程序(如果不是默认值)使用Subversion提供程序。
再定义一个称为path的参数:
newparam(:path) do
desc "Destination path"
validate do |value|
unless value =~ /^\/[a-z0-9]+/
raise ArgumentError , "%s is not a valid file path" % value
end
颠覆提供者:
require 'fileutils'
Puppet::Type.type(:repo).provide(:svn) do
desc "SVN Support"
commands :svncmd => "svn"
commands :svnadmin => "svnadmin"
def create
svncmd "checkout", resource[:name], resource[:path]
end
def destroy
FileUtils.rm_rf resource[:path]
end
def exists?
File.directory? resource[:path]
end
end
接下来,将提供者定义为一个块:
Puppet::Type.type(:repo).provide(:svn) do
该代码块通知Puppet,这是一个称为svn的类型回购提供程序。接下来,定义此提供程序将使用的命令:
commands :svncmd => "svn"
commands :svnadmin => "svnadmin"
在Puppet中,这些命令用于评估提供程序是否适合在客户端上使用。如果人偶无法在本地路径中获取这些命令,则该提供程序将被禁用。
现在,我们可以生成资源:
repo { "wp":
source => "http://core.svn.wordpress.org/trunk/",
path => "/var/www/wp",
ensure => present,
}