手順は以下の4つです。
1.attributeにデフォルト値を記述
2.environmentに環境毎の設定値を記述
3.node情報にどのenviromentを使用するか記述
4.recipeに定義した変数を記述
これらについて一つずつ手順を説明していきます。
1.attributeにデフォルト値を記述
attributeのファイル下記の場所にあります。
cookbook/{レシピ名}/attributes/default.rb
これに対して定義したい変数を記述します。
default[:{参照名1}] = {設定値1} default[:{参照名2}][:{参照名3}] = {設定値2} default[:{参照名4}][:{参照名5}][:{参照名6}] = {設定値3}
前回同様にWildflyで使用した例をあげると次のようになります。
「wildfly->min_pool_size」に5を設定、「wildfly->max_pool_size」に10を設定しています。
また、「wildfly->jdbc」には「jdbc:mysql://XXXXXX」の文字列を設定しています。
default[:wildfly][:min_pool_size] = 5 default[:wildfly][:max_pool_size] = 10 default[:wildfly][:jdbc] = "jdbc:mysql://XXXXXX"
2.environmentに環境毎の設定値を記述
続いてenvironmentに環境毎の値を設定していきます。
environmentのファイルは下記の通り、クックブックより上位の場所にあります。
{chefリポジトリ}/environments/{環境名}.json
このファイルに対してattributeと同じ名前で定義します。
{ "name": "{環境名}", "description": "This is an develop environment defined as JSON", "chef_type": "environment", "json_class": "Chef::Environment", "default_attributes": { {ここに変数の定義} }, "override_attributes": { }, "cookbook_versions": { "develop": "= 1.0.0" } }
Wildflyを例にすると下記のようになります。
attributeと違い、jsonで記述しております。
Ruby形式でも記述することは可能です。
リポジトリ作成時にできるサンプルファイルはjsonなのでそれに合わせています。
{ "name": "production", "description": "This is an develop environment defined as JSON", "chef_type": "environment", "json_class": "Chef::Environment", "default_attributes": { "wildfly": { "min_pool_size": "50", "max_pool_size": "200", "jdbc": "jdbc:mysql://YYYYYY" } }, "override_attributes": { }, "cookbook_versions": { "develop": "= 1.0.0" } }
3.node情報にどのenviromentを使用するか記述
nodeファイルを開き次の記述を追加します。
"chef_environment": "{環境名}",
同じように上記に沿って値を記述すると次のようになります。
"chef_environment": "production",
4.recipeに定義した変数を記述
recipeに定義した変数を記述して使用します。
node[:{参照名1}] node[:{参照名2}][:{参照名3}] node[:{参照名4}][:{参照名5}][:{参照名6}]
前回使用したWildflyのtempleteレシピに当てはめると次のようになります。
template "/opt/wildfly10/standalone/configuration/standalone.xml" do owner "wildfly" group "wildfly" mode 0644 source "wildfly/standalone.xml.erb" variables({ :min_pool_size => node['wildfly']['min_pool_size'], :max_pool_size => node['wildfly']['max_pool_size'], :jdbc => node['wildfly']['jdbc'] }) end
以上、attributeとenvironmentsを使用した環境毎の設定値変更方法です。
環境を増やすときは2と3の手順を行ないます。
ちなみにこれはknife-zeroを使用したときの記述方法になります。
chef-zeroを使用する場合は記述方法が多少変わります。