diff --git a/magnum/drivers/heat/template_def.py b/magnum/drivers/heat/template_def.py
index 58153d1addba836f2dd118d13386f965ab0588d7..e117b852aa4281ccd38a15fbd3d4a6de5f0ca8cb 100755
--- a/magnum/drivers/heat/template_def.py
+++ b/magnum/drivers/heat/template_def.py
@@ -505,11 +505,24 @@ class BaseTemplateDefinition(TemplateDefinition):
                 CONF.cluster.etcd_discovery_service_endpoint_format %
                 {'size': cluster.master_count})
             try:
-                discovery_request = requests.get(discovery_endpoint)
-                if discovery_request.status_code != requests.codes.ok:
-                    raise exception.GetDiscoveryUrlFailed(
-                        discovery_endpoint=discovery_endpoint)
-                discovery_url = discovery_request.text
+                for attempt in range(0, 3):
+                    discovery_request = requests.get(discovery_endpoint)
+                    if discovery_request.status_code != requests.codes.ok:
+                        if attempt < 2:
+                            LOG.warning("Failed to get discovery url " +
+                                        "from '%s' (HTTP %d): %s",
+                                        discovery_endpoint,
+                                        discovery_request.status_code,
+                                        discovery_request.text)
+                            continue
+                        raise exception.GetDiscoveryUrlFailed(
+                            message="Failed to get discovery url " +
+                                    "from '%(discovery_endpoint)s' " +
+                                    "(HTTP %(status_code)d).",
+                            discovery_endpoint=discovery_endpoint,
+                            status_code=discovery_request.status_code)
+                    discovery_url = discovery_request.text
+                    break
             except req_exceptions.RequestException as err:
                 LOG.error(err)
                 raise exception.GetDiscoveryUrlFailed(