Chef attributeとenvironmentsで環境毎の設定値を変数にする

投稿者: | 2016年5月24日

手順は以下の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を使用する場合は記述方法が多少変わります。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA