Skip to content
This repository was archived by the owner on Dec 13, 2018. It is now read-only.

Commit 79442da

Browse files
author
Feng Honglin
committed
Merge pull request #42 from docker/prevent_retrying_on_401
TUT-974 Prevent retrying on 401
2 parents d031529 + 7fc4eea commit 79442da

3 files changed

Lines changed: 32 additions & 7 deletions

File tree

haproxy/eventhandler.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import logging
3+
import time
34

45
import dockercloud
56
from compose.cli.docker_client import docker_client
@@ -52,12 +53,23 @@ def on_user_reload(signum, frame):
5253
run_haproxy("User reload")
5354

5455

56+
def on_cloud_error(e):
57+
if isinstance(e, KeyboardInterrupt):
58+
exit(0)
59+
60+
5561
def listen_dockercloud_events():
5662
events = dockercloud.Events()
5763
events.on_open(on_websocket_open)
5864
events.on_close(on_websocket_close)
5965
events.on_message(on_cloud_event)
60-
events.run_forever()
66+
events.on_error(on_cloud_error)
67+
while True:
68+
try:
69+
events.run_forever()
70+
except dockercloud.AuthError as e:
71+
logger.info("Auth error: %s, retry in 1 hour" % e)
72+
time.sleep(3600)
6173

6274

6375
def listen_docker_events():

haproxy/haproxycfg.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,14 @@ def _initialize(link_mode):
6464
@staticmethod
6565
def _init_cloud_links():
6666
haproxy_container = fetch_remote_obj(HAPROXY_CONTAINER_URI)
67-
links = CloudLinkHelper.get_cloud_links(haproxy_container)
68-
Haproxy.cls_linked_services = CloudLinkHelper.get_linked_services(links)
69-
logger.info("Linked service: %s", ", ".join(CloudLinkHelper.get_service_links_str(links)))
70-
logger.info("Linked container: %s", ", ".join(CloudLinkHelper.get_container_links_str(links)))
71-
return links
67+
if haproxy_container:
68+
links = CloudLinkHelper.get_cloud_links(haproxy_container)
69+
Haproxy.cls_linked_services = CloudLinkHelper.get_linked_services(links)
70+
logger.info("Linked service: %s", ", ".join(CloudLinkHelper.get_service_links_str(links)))
71+
logger.info("Linked container: %s", ", ".join(CloudLinkHelper.get_container_links_str(links)))
72+
return links
73+
else:
74+
return {}
7275

7376
@staticmethod
7477
def _init_new_links():

haproxy/utils.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,27 @@
77

88
logger = logging.getLogger("haproxy")
99

10+
invalid_auth_headers = set()
11+
1012

1113
def fetch_remote_obj(uri):
1214
if not uri:
1315
return None
1416

17+
auth_header = str(dockercloud.auth.get_auth_header())
1518
while True:
1619
try:
20+
if auth_header in invalid_auth_headers:
21+
logger.info("Using know invalid credentials")
22+
return None
1723
obj = dockercloud.Utils.fetch_by_resource_uri(uri)
1824
return obj
25+
except dockercloud.AuthError as e:
26+
invalid_auth_headers.add(auth_header)
27+
logger.info(e)
28+
return None
1929
except Exception as e:
20-
logger.error(e)
30+
logger.info(e)
2131
time.sleep(config.API_RETRY)
2232

2333

0 commit comments

Comments
 (0)