Puppet-タイプとプロバイダー

パペットタイプは、個々の構成管理に使用されます。Puppetには、サービスタイプ、パッケージタイプ、プロバイダータイプなど、さまざまなタイプがあります。各タイプにはプロバイダーがあります。プロバイダーは、さまざまなプラットフォームまたはツールで構成を処理します。たとえば、パッケージタイプには、aptitude、yum、rpm、およびDGMプロバイダーがあります。多くのタイプがあり、Puppetは管理が必要な優れたスペクトル構成管理項目をカバーしています。

Puppetは基本言語としてRubyを使用しています。存在するすべてのPuppetタイプとプロバイダーはRuby言語で書かれています。標準のエンコード形式に従っているため、リポジトリを管理するリポジトリの例に示すように、簡単に作成できます。ここでは、タイプリポジトリとプロバイダーの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があります。次のステートメントはEnsurableです。これは、基本的なensureプロパティを作成します。Puppetタイプは ensure 構成アイテムの状態を判別するためのプロパティー。

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

sureステートメントは、Puppetに、create、destroy、およびプロバイダー内に存在するという3つのメソッドを除外するように指示します。これらのメソッドは、次の機能を提供します-

  • リソースを作成するコマンド
  • リソースを削除するコマンド
  • リソースの存在を確認するコマンド

次に行う必要があるのは、これらのメソッドとその内容を指定することだけです。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を定義しました。

最後に、コードでpathと呼ばれるもう1つのパラメーターを定義しました。

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プロバイダーのユースケース

上記で作成したタイプを使用して、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として定義しました。これは、これがrepoと呼ばれるタイプのプロバイダーであることをPuppetに通知します。

次に、追加しました descこれにより、プロバイダーにドキュメントを追加できます。このプロバイダーが使用するコマンドも定義しました。次の行では、作成、削除、存在などのリソースの機能を確認しています。

リソースの作成

上記のすべてが完了したら、次のコードに示すように、クラスとマニフェストファイルで使用されるリソースを作成します。

repo { "wp": 
   source => "http://g01063908.git.brcl.org/trunk/", 
   path => "/var/www/wp", 
   ensure => present, 
}