LoginSignup
0
0

More than 5 years have passed since last update.

AttributeとData Bagの使用方法

Posted at

概要

レシピやテンプレートの記述などで動的な値を利用したい場合は、AttributeとData Bagといった機能を利用することができます。
複数箇所に同じ値を設定する必要がある場合などは、事前にAttributeまたはData Bagに値を設定しておき、その変数をレシピやテンプレートに記載するといった使い方ができます。

それぞれ以下の違いがあります。

Attribute

ノード固有の情報を設定しておく場合に使用するもの。

Data Bag

ユーザーの情報を複数のノードで共有して使用する場合に使用するもの。
LDAPでユーザー情報を管理するようなもの。

それぞれの利用方法については以下で説明します。

Attributeの利用方法

Attributeの値を設定する方法は2つあります。
1つはNodeオブジェクトへの記述、もう1つは"attributes/default.rb"への記述です。
同じ設定内容が両方の記述にあった場合、優先度としてはNodeオブジェクトへの記述が優先されます。

Nodeオブジェクトへの記述

nodes/xxx.json
{
  "httpd": {
    "port": 80
  },
  "run_list":[
    "recipe[git]"
  ]
}

上記のようにNodeオブジェクトへ記述した場合は、レシピやテンプレート上で次の変数でport番号を参照できます。

default['httpd']['port']

attributes/default.rbへの記述

attributes/default.rb
default['apache']['dir'] = "/etc/apache2"
default['apache']['listen_ports"] = [ '80', '443' ]

このように記述することができ、同様に次の変数で参照することができます。

default['apache']['dir']

Data Bagの利用方法

ユーザーの情報を記述する

以下のディレクトリを作成し、json形式でユーザーの情報を記述する。

Command
mkdir -p data_bags/users/<ユーザー名>
data_bags/users/sample
{
  "id": "sample",
  "username": "sample",
  "home": "home/sample",
  "shell": "/bin/bash"
}

Data Bagからの値の取得

data_bagメソッドに引数で、'users'を渡すことで、data_bag/users 以下のユーザー一覧を取得できる。
data_bag_itemメソッドで、'users'、ユーザーIDを渡すと、個々のユーザー情報を取得することができる。

recipes/default.rb
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0