我正在使用 opscode chef 来自动化 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 地址,但我真的不明白如何获取每个键和值,解析值,然后用解析的值替换它。