opscode シェフを使用して、MySQL クラスターのデプロイを自動化しています。目的のホストを JSON ファイルに入れ、シェフにそれらのホスト名を内部 IP アドレスに解決させ、IP アドレスを変数として設定したいと考えています。
次のような単純なハッシュがあります。
[data_bag_item["dbclstr", "dbclstr",
{
"id"=>"dbclstr",
"nodes"=>{"sql1"=>"cdb1.ex.net",
"sql2"=>"cdb2.ex.net",
"mgmnt"=>"cdb1.ex.net",
"db1"=>"cdb1.ex.net",
"db2"=>"cdb2.ex.net"
}}]]
私は基本的にノードキーを取得し、ハッシュ内のすべてのキー値を調べて各キー/値を取得し、IP アドレスを返す検索関数を介して値を解析し、そのキーに値を割り当てたいと考えています。
dbclstr = search(:dbclstr).first # Loads json into hash
privip = dbclstr["nodes"] # grabs node hash from hash (turns into a mash?)
privip = privip.to_hash # turn mash to hash
privip.map { |key,value| # maps the keys and values of the hash.
item = search(:node,"name:value") #loads machine data from chef into object
value = "#{item[0][:cloud][:private_ips]}" # extracts ip address from object and sets it as value, done?
}
まあ、これはうまくいきません。
個別にホスト名を IP アドレスに解決できますが、各キーと値を取得して値を解決し、解決された値に置き換える方法がよくわかりません。