Recipe にパラメータを与える仕組みです。
Attribute はプロビジョニング時に指定できる Key-Value 形式のデータで、Recipe からその値を参照できます。
Attribute の Key は Cookbook の製作者が自由に決定でき、その用途も自由です。
Cookbook の設計によりけりですが、たいていの場合は次の項目は Attribute にすることが多いです。
Attribute にはあらかじめデフォルト値を指定しておくことができます。
Attribute のデフォルト値は専用のファイルに記述します。
このファイルは chef generate attribute コマンド で生成できます。
$ chef generate attribute ./ default |
これで ./attributes ディレクトリに default.rb という名前でファイルが生成されます。
生成されたファイルに、以下のようにデフォルト値を定義します。
default['application']['version'] = '1.0.0' |
Attribute の Key は default[<Cookbook 名>][<任意の Attribute 名>] とするのが一般的なようです。
jenkins Cookbook であれば、次のようなイメージです。
default['jenkins']['version'] = '1.0.0' |
Recipe から Attribute の値を参照するには、node オブジェクト を使用します。
例えば、Kitchen で次のように Attribute を指定したときは、
attributes: application: version: '2.0.0' |
Recipe では次のように値を参照します。
application_version = node['application']['version'] # application_version == '2.0.0' |
Recipe では cookbook_name メソッド を利用して自分の Cookbook の名前を取得できます。
|
Attibute の指定方法はプロビジョニングの方法により異なります。
.kitchen.yml の attributes に YAML 形式で指定します。
attributes: application: version: '2.0.0' |
Vagrantfile の chef.json に Hash で指定します。
config.vm.provision :chef_solo do |chef| chef.json = { application: { version: '2.0.0' } } end |
knife node edit コマンドを実行し、Json ファイルを直接編集して指定します。
"normal": { "application": { "version": "2.0.0" } } |
※ knife での運用はしていないので、間違っているかもしれません。
ここまでで、なんとなく Attribute というのがどういうものかがわかったら、前回作成した Cookbook を Attribute に対応させてみましょう。
次のページ へ進んでください。