Puppet-module
Puppet-モジュール
Puppetでは、モジュールはリソース、クラス、ファイル、定義、およびテンプレートのコレクションとして定義できます。 Puppetはモジュールの簡単な再配布をサポートします。これは、指定された汎用モジュールを記述し、簡単なコード変更をほとんどせずに複数回使用できるため、コードのモジュール化に非常に役立ちます。 たとえば、これにより、/etc/puppetでデフォルトのサイト構成が有効になり、Puppetによって出荷されるモジュールは/etc/share/puppetに適切に格納されます。
モジュール構成
Puppetモジュールには、コードの構造を定義し、宗派を制御するのに役立つ2つのパーティションがあります。
- モジュールの検索パスは、 puppetmasterd または masterd のコロンで区切られたディレクトリのリストを使用して構成されます。 puppetmasterd または masterd は、Puppetのマスター構成ファイルの後のセクションで、 modulepath パラメーターを使用します。
[puppetmasterd]
...
modulepath =/var/lib/puppet/modules:/data/puppet/modules
- fileserver.conf内のファイルサーバーモジュールのアクセス制御設定。そのモジュールのパス構成は常に無視され、パスを指定すると警告が生成されます。
モジュールソース
Puppetは、モジュールを保存するための別の場所をサポートしています。 モジュールは、特定のマシンの異なるファイルシステムに保存できます。 ただし、モジュールが格納されているすべてのパスは、一般的に modulepath として知られる構成変数で指定する必要があります。これは、Puppetがすべてのモジュールディレクトリをスキャンし、起動時にロードするパス変数です。
合理的なデフォルトパスは次のように設定できます-
/etc/puppet/modules:/usr/share/puppet:/var/lib/modules.
または、/etc/puppetディレクトリを特別な匿名モジュールとして確立し、常に最初に検索することもできます。
モジュールの命名
Puppetは特定のモジュールと同じ命名規則に従います。モジュール名は通常の単語で、[-\\ w +](文字、単語、数字、アンダースコア、ダッシュ)に一致し、名前空間の区切り文字を含まない必要があります。 モジュール階層に関しては許可される場合がありますが、新しいモジュールの場合はネストできません。
モジュール内部組織
ユーザーがPuppetで新しいモジュールを作成すると、同じ構造に従い、次のコードに示すように、特定のディレクトリ構造に配置されたマニフェスト、分散ファイル、プラグイン、テンプレートが含まれます。
MODULE_PATH/
downcased_module_name/
files/
manifests/
init.pp
lib/
puppet/
parser/
functions
provider/
type/
facter/
templates/
README
モジュールが作成されるたびに、マニフェストディレクトリ内の指定された修正場所に init.pp マニフェストファイルが含まれます。 このマニフェストファイルは、特定のモジュールで最初に実行され、その特定のモジュールに関連付けられているすべてのクラスのコレクションを含むデフォルトファイルです。 追加の .pp ファイルは、manifestsフォルダーの下に直接追加できます。 追加の.ppファイルを追加する場合は、クラスにちなんで名前を付ける必要があります。
モジュールを使用することで達成される重要な機能の1つは、コードの共有です。 モジュールは本質的に自己完結型である必要があります。つまり、どこからでも任意のモジュールを含めることができ、Puppetの起動時にロードされるモジュールパスにドロップできる必要があります。 モジュールの助けを借りて、Puppetインフラストラクチャコーディングのモジュール性を得ることができます。
例
固定のauto.homesマップをインストールし、テンプレートからauto.masterを生成するautofsモジュールを検討してください。
class autofs {
package { autofs: ensure => latest }
service { autofs: ensure => running }
file { "/etc/auto.homes":
source => "puppet://$servername/modules/autofs/auto.homes"
}
file { "/etc/auto.master":
content => template("autofs/auto.master.erb")
}
}
ファイルシステムには次のファイルがあります。
MODULE_PATH/
autofs/
manifests/
init.pp
files/
auto.homes
templates/
auto.master.erb
モジュール検索
Puppetは事前定義された構造に従い、定義された構造に複数のディレクトリとサブディレクトリが含まれます。 これらのディレクトリには、特定のアクションを実行するためにモジュールが必要とするさまざまな種類のファイルが含まれています。 少し舞台裏の魔法は、適切なファイルが適切なコンテキストに関連付けられていることを確認します。 すべてのモジュール検索は、コロンで区切られたディレクトリのリストであるmodulepath内で行われます。
ファイルサーバー上のファイル参照では、同様の参照が使用され、puppet://$servername/modules/autofs/auto.homesへの参照がモジュールパス内のファイルautofs/files/auto.homesに解決されます。
コマンドラインクライアントとパペットマスターの両方でモジュールを使用できるようにするには、from puppet:///pathのURLを使用できます。 i.e. 明示的なサーバー名のないURL。 このようなURLは、 Puppet と* puppetd によってわずかに異なります。 Puppetは、ローカルファイルシステムでサーバーレスURLを検索します。
テンプレートファイルは、マニフェストおよびファイルと同様の方法で検索されます。テンプレート(「autofs/auto.master.erb」)に言及すると、puppetmasterは $ templatedir/autofs/auto.master.erb のファイルを最初に検索します。そして、モジュールパス上の autofs/templates/auto.master.erb 。 Puppetの下にあるすべてのPuppetバージョンでは、使用できます。 これは、モジュールの自動ロードと呼ばれます。 Puppetはモジュールからクラスと定義を自動ロードしようとします。