Получить IP-адрес узла, возвращаемый поиском шеф-повара в рецепте

Как я могу получить IP-адрес, возвращаемый поиском узла в рецепте шеф-повара (ruby).

dbnodes = search(:node, "role:Db")
Chef::Log.info(dbnodes.first["ipaddress"]) # nil

Несколько недель назад этот код возвращал IP первого экземпляра из поискового API.

версия: Шеф: 10.14.2


person Matej    schedule 12.11.2012    source источник


Ответы (1)


Я предполагаю, что вы новичок в Ruby. Если это так, добро пожаловать!

Функция Chef search() возвращает массив узлов Chef, и вы берете заголовок этого массива, используя метод first. Для доступа к IP-адресу других узлов используйте обычный оператор массива:

dbnodes = search(:node, "role:Db")
dbnodes.each do |node|
  Chef::Log.info("#{node["name"]} has IP address #{node["ipaddress"]}")
end

Это должно дать вам необходимую информацию.

person Tim Potter    schedule 12.11.2012
comment
Я думаю, говоря, что этот код возвращает IP-адрес первого экземпляра из поискового API, Матей имел в виду то же самое. - person meandre; 07.02.2013
comment
Итак, для получения IP-адресов узлов мы должны назначить некоторые роли или среду в качестве шаблона для поиска узлов, верно? Предположим, я не назначил никакой роли или среды, просто настроил 3 клиента с сервером, так что есть ли способ получить ips этих клиентов. - person sandip divekar; 11.12.2014
comment
Вы можете получить список всех узлов, используя другую команду поиска. Попробуйте search(:node, "*:*"). - person Tim Potter; 12.12.2014