[Chef-Solo]猿でもわかるdata_bag入門
入門ChefSoloに入門してHello Worldしてみた
data_bagsディレクトリを作成してsolo.rbに登録する
cd chef-repo
mkdir data_bags
solo.rbを編集して1行追記
data_bag_path "/path/to/chef-repo/data_bags"
data_bagsにデータを保存する
mkdir data_bags/servers
data_bags/servers/web1.json というファルを新規作成
{
"id" : "web1",
"private_ip" : "10.10.10.10",
"public_ip" : "1.1.1.1"
}
data_bags/servers/web2.json というファルを新規作成
{
"id" : "web2",
"private_ip" : "10.10.10.20",
"public_ip" : "1.1.1.2"
}
レシピからdata_bagsのデータを呼び出す
cookbooks/hello/recipes/default.rblog "web1 private ip = " + data_bag_item('servers','web1')['private_ip']
log "web2 private ip = " + data_bag_item('servers','web2')['public_ip']
こんな感じでレシピを書いて実行すると、
$ chef-repo sudo chef-solo -o hello -c ./solo.rb
[2014-08-16T02:07:44+09:00] WARN: Starting Chef Client, version 11.12.4
[2014-08-16T02:07:52+09:00] WARN: Run List override has been provided.
[2014-08-16T02:07:52+09:00] WARN: Original Run List: []
[2014-08-16T02:07:52+09:00] WARN: Overridden Run List: [recipe[hello]]
Compiling Cookbooks...
Converging 3 resources
Recipe: hello::default
* log[web1 private ip = 10.10.10.10] action write
* log[web2 private ip = 1.1.1.2] action write
レシピからサーバのIPアドレスを取得することができました!
解説
data_bags/servers/web1.json というパス構成についてですが、- "servers"ディレクトリがコレクションのようなもの
- "web1.json"がコレクション内の1アイテム
レシピから呼び出すときは、data_bag_item(コレクション名, アイテムのID) でアイテムを取得できます。
item = data_bag_item('servers','web1')
なお、web1.jsonの中に "id":"web1" などと書かれていて記述がDRYじゃないのが気になりますが、どうもこういうものみたいです。
カテゴリ:
Chef