diff --git a/files/gitlab-cookbooks/consul/libraries/consul_helper.rb b/files/gitlab-cookbooks/consul/libraries/consul_helper.rb index a4b30429912db7766f1380f05ea7a1e8abbfdcdb_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9jb25zdWwvbGlicmFyaWVzL2NvbnN1bF9oZWxwZXIucmI=..4c5e80955707b6129d55d5caaccfadf9694beacd_ZmlsZXMvZ2l0bGFiLWNvb2tib29rcy9jb25zdWwvbGlicmFyaWVzL2NvbnN1bF9oZWxwZXIucmI= 100644 --- a/files/gitlab-cookbooks/consul/libraries/consul_helper.rb +++ b/files/gitlab-cookbooks/consul/libraries/consul_helper.rb @@ -1,3 +1,5 @@ +require 'timeout' + class ConsulHelper attr_reader :node, :default_configuration, :default_server_configuration @@ -146,9 +148,19 @@ def get_api(endpoint, header = nil) uri = URI(api_url) - Net::HTTP.start(uri.host, uri.port) do |http| - http.request_get(endpoint, header) do |response| - return yield response + + Timeout.timeout(30, Timeout::Error, "Timed out waiting for Consul to start") do + loop do + Net::HTTP.start(uri.host, uri.port) do |http| + http.request_get(endpoint, header) do |response| + return yield response + end + end + rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL + sleep 1 + next + else + break end end end