ここでお話しすることがいくつかあります。まず、正規のリファレンス ドキュメントは、パッケージ リソースのChef Docsページにあります。
Chef レシピは Ruby DSL であるため、それが何を意味するのかを調べてみましょう。レシピで定義された各リソースにはタイプがあり、1 つ以上のプロバイダーを持つことができます。リソースは、そのリソースの管理方法を処理する基礎となるもの (プロバイダー) への宣言型インターフェイスです。Chef は、ノードのプラットフォームに基づいてプロバイダーを自動的に選択します。パッケージの場合、Chef には yum、apt、solaris、macports などのプロバイダーがあります。詳細については、ドキュメントを参照してください。
レシピでリソースを宣言する場合、Ruby 用語では、文字列とオプションでブロックの 2 つの引数を取ります。文字列はリソースの「名前」です。ブロック内の各属性パラメータにはデフォルト オプションが含まれる場合があります。これは、さまざまなコア Chef リソースおよびプロバイダのドキュメント サイトに記載されています。この名前は、「name_attribute」と呼ばれる属性の 1 つにも使用されます。この例の場合:
package "apache2" do
package_name node['apache']['package']
end
リソースの名前は、すべての意図と目的で「apache2」です。ただし、パッケージの name 属性は ですpackage_name
。この場合、パッケージ名はnode['apache']['package']
クックブックのattributes/default.rb
ファイルに設定されている属性から取得されます。これは、2 つのディストリビューション/OS がパッケージの呼び方について合意できないため (Debian では apache2、RHEL では httpd)、プラットフォーム固有です。
リソースの特別な属性はアクションです。これは、リソースがどのような状態であるべきかを基になるプロバイダーに伝えます。デフォルトでは、Chef はリソースに対して最も積極的なアクションを実行します。基盤となるシステム リソースへの宣言型インターフェイスとして、Chef はそれが最も正気で驚くべきことではないと考えています。パッケージの場合、Chef はデフォルトでパッケージをインストールします。
したがって、この種のレシピを書く際の概要として:
- " " という名前のパッケージを管理するよう Chef に指示しました
apache2
。
- 管理するパッケージの名前は、実際には属性 `node['apache']['package'] からのものであることを Chef に伝えました。
- 特定のアクションがない場合、Chef はデフォルト
install
でパッケージを実行します。
- Chef は、ノードのプラットフォーム用にデフォルトで設定されている基盤となるパッケージ マネージャーを使用して、パッケージをインストールします。Debian/Ubuntu システムでは、
apt-get install apache2
. RHEL/CentOS などのシステムでは、yum install httpd
.