Я использую команду opscode для автоматизации развертывания кластера MySQL. Я хочу поместить нужные хосты в файл JSON, а затем пусть chef разрешает эти имена хостов на внутренние IP-адреса, а затем устанавливает IP-адреса в качестве переменных.Ruby and Chef: Resolve and Replace Значения в хеш-файле
У меня есть простой хэш, который выглядит следующим образом:
[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-адресов, но я действительно не понимаю, как захватить каждый ключ и значение, разрешить значение, а затем заменить его на разрешенное значение.
а) То, что вы там не массив, это хэш пар ключ/значение. б) Что значит «не работает»? (Я очистил некоторые из вашего кода, который был явно недействителен Ruby, но я подозреваю, что это было не то, что вам нужно.) – Phrogz
Вы нашли решение этой проблемы? Не забудьте отметить правильный ответ! :) – sethvargo