概要
レシピやテンプレートの記述などで動的な値を利用したい場合は、AttributeとData Bagといった機能を利用することができます。
複数箇所に同じ値を設定する必要がある場合などは、事前にAttributeまたはData Bagに値を設定しておき、その変数をレシピやテンプレートに記載するといった使い方ができます。
それぞれ以下の違いがあります。
Attribute
ノード固有の情報を設定しておく場合に使用するもの。
Data Bag
ユーザーの情報を複数のノードで共有して使用する場合に使用するもの。
LDAPでユーザー情報を管理するようなもの。
それぞれの利用方法については以下で説明します。
Attributeの利用方法
Attributeの値を設定する方法は2つあります。
1つはNodeオブジェクトへの記述、もう1つは"attributes/default.rb"への記述です。
同じ設定内容が両方の記述にあった場合、優先度としてはNodeオブジェクトへの記述が優先されます。
Nodeオブジェクトへの記述
{
"httpd": {
"port": 80
},
"run_list":[
"recipe[git]"
]
}
上記のようにNodeオブジェクトへ記述した場合は、レシピやテンプレート上で次の変数でport番号を参照できます。
default['httpd']['port']
attributes/default.rbへの記述
default['apache']['dir'] = "/etc/apache2"
default['apache']['listen_ports"] = [ '80', '443' ]
このように記述することができ、同様に次の変数で参照することができます。
default['apache']['dir']
Data Bagの利用方法
ユーザーの情報を記述する
以下のディレクトリを作成し、json形式でユーザーの情報を記述する。
mkdir -p data_bags/users/<ユーザー名>
{
"id": "sample",
"username": "sample",
"home": "home/sample",
"shell": "/bin/bash"
}
Data Bagからの値の取得
data_bagメソッドに引数で、'users'を渡すことで、data_bag/users 以下のユーザー一覧を取得できる。
data_bag_itemメソッドで、'users'、ユーザーIDを渡すと、個々のユーザー情報を取得することができる。
data_ids = data_bag('users')
data_ids.each do |id|
u = data_bag_item('users', id)
user u['username'] do
home u['username']
shell u['shell']
end
end