开发手册 欢迎您!
软件开发者资料库

Puppet - Type和Provider

Puppet Type和Provider - 从简单和简单的步骤学习Puppet,从基本到高级概念,包括概述,架构,安装,配置,环境配置,主机,代理设置,SSL签名证书设置,安装和配置r10K,验证Puppet设置,编码样式,清单文件,模块,文件服务器,Facter和事实,资源,资源抽象层,模板,类,功能,自定义函数,环境,类型和提供程序,RESTful API,实时项目。

Puppet类型用于单独的配置管理. Puppet有不同的类型,如服务类型,包类型,提供者类型等.其中每种类型都有提供者.提供程序处理不同平台或工具上的配置.例如,包类型具有aptitude,yum,rpm和DGM提供程序.有很多类型,Puppet包含一个需要管理的良好频谱配置管理项.

Puppet使用Ruby作为基本语言.存在的所有Puppet类型和提供程序都是用Ruby语言编写的.由于它遵循标准编码格式,因此可以简单地创建它们,如管理存储库的repo示例中所示.在这里,我们将创建类型repo和provider的svn和git. repo类型的第一部分是类型本身.类型通常存储在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)做"这会创建一个名为repo的新类型.然后,我们有@doc,它有助于添加想要添加的任何级别的详细信息.下一个陈述是可以接受的;它创造了一个基本的保证财产. Puppet类型使用 ensure 属性来确定配置项的状态.

示例

service { "sshd":    ensure => present, }

Ensure语句告诉Puppet除了三个方法:create,destroy,并且在提供者中存在.这些方法提供以下功能 :

  • 创建资源的命令

  • 命令删除资源

  • 检查资源是否存在的命令

我们当时需要做的就是指定这些方法及其内容. 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

源将告知repo类型检索/克隆/检出源存储库的位置.在这里,我们还使用了一个名为validate的钩子.在提供程序部分,我们定义了git和svn,它们检查我们定义的存储库的有效性.

最后,在代码中我们又定义了一个名为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

这是值类型,它指定放置检索到的新代码的位置.在这里,再次使用validate钩子创建一个检查适当值的块.

Subversion Provider用例

让我们从subversion提供者开始使用上面创建的类型.

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

在上面的代码中,我们预先定义了我们需要 fileutils library,require 'fileutils'我们将使用它的方法.

接下来,我们将提供者定义为块Puppet :: Type. type(:repo).provide(:svn)do告诉Puppet这是一个名为repo的类型的提供者.

然后,我们添加了 desc 允许向提供程序添加一些文档.我们还定义了此提供程序将使用的命令.在下一行中,我们正在检查资源的功能,如创建,删除和存在.

创建资源

完成以上所有操作后完成后,我们将创建一个将在我们的类和清单文件中使用的资源,如下面的代码所示.

repo { "wp":    source => "https://img01.yuandaxia.cn/Content/img/tutorials/puppet/,    path => "/var/www/wp",    ensure => present, }