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,
}