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