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

Commit 1a77f7c

Browse files
Mark van Rossumtifayuki
authored andcommitted
Add config check before reload
Fix tests
1 parent aa153a1 commit 1a77f7c

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

haproxy/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ def parse_additional_backend_settings(envvars):
129129
CACERT_DIR = "/cacerts/"
130130
HAPROXY_CONFIG_FILE = "/haproxy.cfg"
131131
HAPROXY_RUN_COMMAND = ['/usr/sbin/haproxy', '-f', HAPROXY_CONFIG_FILE, '-db', '-q']
132+
HAPROXY_CONFIG_CHECK_COMMAND = ['/usr/sbin/haproxy', '-c', '-f', HAPROXY_CONFIG_FILE]
132133
API_RETRY = 10 # seconds
133134
PID_FILE = "/tmp/dockercloud-haproxy.pid"
134135
SERVICE_PORTS_ENVVAR_NAME = "SERVICE_PORTS"

haproxy/helper/update_helper.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import time
55
import errno
66

7-
from haproxy.config import HAPROXY_RUN_COMMAND, RELOAD_TIMEOUT
7+
from haproxy.config import HAPROXY_RUN_COMMAND, RELOAD_TIMEOUT, HAPROXY_CONFIG_CHECK_COMMAND
88

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

@@ -22,6 +22,16 @@
2222
#
2323
def run_reload(old_process, timeout=int(RELOAD_TIMEOUT)):
2424
if old_process:
25+
p = subprocess.Popen(HAPROXY_CONFIG_CHECK_COMMAND, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
26+
output, err = p.communicate()
27+
return_code = p.returncode
28+
if (return_code != 0):
29+
logger.error("Config check failed. NOT reloading haproxy")
30+
logger.error(output)
31+
logger.error(err)
32+
return
33+
else:
34+
logger.info("Config check passed")
2535
# Reload haproxy
2636
logger.info("Reloading HAProxy")
2737
if timeout == -1:

tests/unit/helper/test_update_helper.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,19 @@ def poll(self):
2424

2525
def terminate(self):
2626
self.terminated = True
27+
28+
def communicate(self):
29+
return ("", "")
2730

2831
pass
2932

3033
class Object(object):
31-
pass
34+
returncode = 0
35+
36+
def communicate(self):
37+
return ("", "")
38+
39+
pass
3240

3341
@mock.patch("haproxy.helper.update_helper.subprocess.Popen")
3442
def test_run_graceful_reload_within_timeout(self, mock_popen):

0 commit comments

Comments
 (0)