- 木偶教程
- 木偶 - 主页
- 基础木偶
- 木偶 - 概述
- 木偶 - 建筑
- 傀儡 - 安装
- 木偶 - 配置
- Puppet - 环境会议
- 木偶大师
- Puppet - 代理设置
- Puppet - SSL 签名证书设置
- 安装和配置 r10K
- Puppet - 验证设置
- Puppet - 编码风格
- Puppet - 清单文件
- 木偶 - 模块
- Puppet - 文件服务器
- 木偶 - 事实与事实
- 高级傀儡
- 木偶 - 资源
- Puppet - 资源抽象层
- 木偶 - 模板
- 木偶 - 课程
- 木偶 - 功能
- Puppet - 自定义函数
- 木偶 - 环境
- 木偶 - 类型和提供者
- Puppet - RESTful API
- 木偶 - 现场项目
- 木偶有用资源
- 木偶 - 快速指南
- 木偶 - 有用的资源
- 木偶 - 讨论
木偶 - 类型和提供者
傀儡类型用于单独的配置管理。Puppet 有不同的类型,如服务类型、包类型、提供者类型等。其中每种类型都有提供者。提供者处理不同平台或工具上的配置。例如,包类型有 aptitude、yum、rpm 和 DGM 提供程序。种类很多,Puppet涵盖了很好的需要管理的频谱配置管理项。
Puppet 使用 Ruby 作为其基础语言。所有存在的 Puppet 类型和提供程序都是用 Ruby 语言编写的。由于它遵循标准编码格式,因此可以简单地创建它们,如管理存储库的 repo 示例所示。在这里,我们将创建类型 repo 和提供商的 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 类型使用Ensure属性来确定配置项的状态。
例子
service { "sshd": ensure => present, }
Ensure 语句告诉 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
源将告诉存储库类型在哪里检索/克隆/签出源存储库。在此,我们还使用了一个名为 validate 的钩子。在提供程序部分,我们定义了 git 和 svn,它们检查我们定义的存储库的有效性。
最后,在代码中我们又定义了一个参数,称为路径。
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
这是指定将检索到的新代码放置在何处的值类型。在这里,再次使用验证挂钩创建一个块来检查适当性的值。
Subversion 提供程序用例
让我们从使用上面创建的类型的 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库,需要我们将使用其中的方法的“fileutils” 。
接下来,我们将提供程序定义为块 Puppet::Type.type(:repo).provide(:svn) do ,它告诉 Puppet 这是名为 repo 的类型的提供程序。
然后,我们添加了desc,它允许向提供程序添加一些文档。我们还定义了该提供程序将使用的命令。在下一行中,我们将检查资源的创建、删除和存在等功能。
创建资源
完成上述所有操作后,我们将创建一个资源,该资源将在我们的类和清单文件中使用,如以下代码所示。
repo { "wp": source => "http://g01063908.git.brcl.org/trunk/", path => "/var/www/wp", ensure => present, }