Вы можете продолжить работу после первой неудачной попытки подключения, обработав исключение, вызванное Net::Telnet::initialize
. Вы обнаружите, что не получаете ошибку, которую, по вашему мнению, получаете:
begin
tn = Net::Telnet::new("Host" => "#{hostname}",
"Timeout" => false,
"Prompt" => /[$%#>] \z/n)
rescue => e
puts "Unable to connect to #{hostname}: #{e.message}"
next
end
Производит
Невозможно подключиться к узлу host1: getaddrinfo: nodename или servname предоставлены или неизвестны
То есть вы на самом деле не предоставляете имя хоста. Аргумент не называется "Host"
, он называется "host"
, и регистр имеет значение. Параметры Ruby также обычно передаются в виде символов , а не строк . Попробуйте это:
tn = Net::Telnet::new(:host => "#{hostname}",
:timeout => false,
:prompt => /[$%#>] \z/n)
Теперь вы получите ожидаемую ошибку:
Невозможно подключиться к хосту1: соединение отказано - подключиться (2)