Chefのnode[:hoge]をどうにかしたい
December 4, 2013
2013年オワコンの代表格として名指しされているChefですが
nodes/hoge.jsonで与えられたnode[:hoge]
の値を
roles/role.jsonで値を追加したい場合があります。
そのやり方として、オフィシャルにはディープマージという方法が載っていました。
http://docs.opscode.com/essentials_node_object_deep_merge.html
nodes/hoge.json
{ "run_list": [ "role[role_one]" ] }
roles/role_one.json
{ "name": "role_one", "description": "role one", "json_class": "Chef::Role", "override_attributes": { "hoge": [ "foo", "bar" ] }, "default_attributes": { }, "chef_type": "role", "run_list": [ "role[role_two]" ] }
roles/role_two.json
{ "name": "role_two", "description": "role two", "json_class": "Chef::Role", "override_attributes": { "hoge": [ "baz" ] }, "default_attributes": { }, "chef_type": "role", "run_list": [ "recipe[hoge_recipe]" ] }
cookbooks/hoge_recipe/recipe/default.rb
node[:hoge].each do |h| p h end
role
で回せと。
ほかにも@keita氏に教えてもらったのですが
Key-Valueで渡せばいけるらしいです。
Arrays and Chef Attributes - Noah Kantrowitz
nodes/hoge.json
{ "hoge": { "foo": true, "bar": true }, "run_list": [ "role[role_one]" ] }
roles/role_one.json
{ "name": "role_one", "description": "role one", "json_class": "Chef::Role", "override_attributes": { "hoge": { "baz": true } }, "default_attributes": { }, "chef_type": "role", "run_list": [ "recipe[hoge_recipe]" ] }
cookbooks/hoge_recipe/recipe/default.rb
node[:hoge].each do |k,v| p k end
どちらも気持ち悪いので使いません。
よさ気な方法あれば教えて下さい。
Chef、Opscode社の経典みたいなcookbooksと
何がどこに書かれているかよくわからないドキュメントをのぞけば
2014年もよしなに使えるのではないかと思います。