Attribute による Recipe の制御

Attribute とは

Recipe にパラメータを与える仕組みです。
Attribute は Key-Value 形式のデータで、プロビジョニング時に指定しておくと、Recipe からその値を自由に参照できます。
それにより、Recipe をより柔軟に記述できるようになります。

 

Attribute に値を指定する

Attibute の指定方法はプロビジョニングの方法により異なります。

Kitchen の場合

.kitchen.yml の attributes に YAML 形式で指定します。

attributes:
  application:
    version: ‘2.0.0’

Vagrant の場合

Vagrantfile の chef.json に Hash で指定します。

config.vm.provision :chef_solo do |chef|  chef.json = {
    application: {
      version: ‘2.0.0’
    }
  }

Knife の場合

knife node edit コマンドを実行し、Json ファイルを直接編集して指定します。

"normal": {
  "application": {
    "version": "2.0.0"
  }
}

※ knife での運用はしていないので、間違っているかもしれません。

 

Attribute の値を Recipe で使用する

Recipe から Attribute の値を参照するには、node オブジェクトを使用します。

Attribute の指定

attributes:
  application:
    version: '2.0.0'

Recipe で Attribute の値を参照

application_version = node[‘application’][‘version’] # application_version == '2.0.0'

 

Attribute にデフォルト値を設定する

Attribute には、値が指定されなかった場合のデフォルト値をあらかじめ指定しておくことができます。

デフォルト値は専用のファイルに記述します。
このファイルは chef コマンドで生成できます。

chef generate attribute ./ default

./attributes/default.rb というファイルが生成されますので、以下のようにデフォルト値を定義します。

default[‘application’][‘version’] = ‘1.0.0’


 

jenkins Cookbook を Attribute に対応させる