Puppet-type-provider
Puppet-タイプとプロバイダー
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
- 上記のスクリプトでは、repoという名前の新しいタイプを作成するブロック「 *Puppet
- Type.newtype(:repo)do* 」を作成しました。 次に、追加したい詳細のレベルを追加するのに役立つ@docがあります。 次のステートメントはEnsurableです。基本的なensureプロパティを作成します。 Puppetタイプは、 ensure プロパティを使用して構成アイテムの状態を判断します。
例
service { "sshd":
ensure => present,
}
ensureステートメントは、Puppetに対して、作成、破棄、およびプロバイダ内に存在する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を定義しました。
最後に、コードでパスと呼ばれるもう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として定義しました。これは、これがレポと呼ばれるタイプのプロバイダーであることをPuppetに伝えます。
次に、プロバイダーにドキュメントを追加できる desc を追加しました。 このプロバイダーが使用するコマンドも定義しました。 次の行では、作成、削除、存在などのリソースの機能を確認しています。
リソースを作成する
上記のすべてが完了したら、次のコードに示すように、クラスとマニフェストファイルで使用されるリソースを作成します。
repo { "wp":
source => "http://g01063908.git.brcl.org/trunk/",
path => "/var/www/wp",
ensure => present,
}