11import copy
22import logging
3+ import time
34from collections import OrderedDict
45
6+ import gevent
57from compose .cli .docker_client import docker_client
68
79import config
1921
2022logger = logging .getLogger ("haproxy" )
2123
24+ tasks = None
2225
23- def run_haproxy (msg = None ):
24- haproxy = Haproxy (config .LINK_MODE , msg )
25- haproxy .update ()
26+
27+ def add_haproxy_run_task (msg = None ):
28+ logger .info ("=> Add task: %s" , msg )
29+ gevent .spawn (tasks .put , (config .LINK_MODE , msg ))
30+
31+
32+ def run_haproxy ():
33+ while True :
34+ delay = 1
35+ mode , msg = tasks .get ()
36+ time .sleep (delay )
37+ while not tasks .empty ():
38+ if mode != "cloud" :
39+ delay = 0.1
40+ logger .info ("=> Task accumulated, skip: %s" , msg )
41+ mode , msg = tasks .get ()
42+ time .sleep (delay )
43+ continue
44+ logger .info ("=> Executing task: %s" , msg )
45+
46+ haproxy = Haproxy (config .LINK_MODE )
47+ haproxy .update ()
2648
2749
2850class Haproxy (object ):
@@ -32,10 +54,8 @@ class Haproxy(object):
3254 cls_certs = []
3355 cls_ca_certs = []
3456
35- def __init__ (self , link_mode = "" , msg = "" ):
57+ def __init__ (self , link_mode = "" ):
3658 logger .info ("==========BEGIN==========" )
37- if msg :
38- logger .info (msg )
3959
4060 self .link_mode = link_mode
4161 self .ssl_bind_string = None
@@ -91,7 +111,7 @@ def _init_new_links():
91111 links , Haproxy .cls_linked_services = NewLinkHelper .get_new_links (docker , haproxy_container )
92112
93113 if ADDITIONAL_SERVICES :
94- additional_links , additional_services = NewLinkHelper .get_additional_links (docker , ADDITIONAL_SERVICES )
114+ additional_links , additional_services = NewLinkHelper .get_additional_links (docker , ADDITIONAL_SERVICES )
95115 if additional_links and additional_services :
96116 links .update (additional_links )
97117 Haproxy .cls_linked_services .update (additional_services )
@@ -118,22 +138,17 @@ def update(self):
118138 logger .info ("Internal error: Specs is not initialized" )
119139
120140 def _update_haproxy (self , cfg ):
121- if self .link_mode in ["cloud" , "new" ]:
122- if Haproxy .cls_cfg != cfg :
123- logger .info ("HAProxy configuration:\n %s" % cfg )
124- Haproxy .cls_cfg = cfg
125- if save_to_file (HAPROXY_CONFIG_FILE , cfg ):
126- Haproxy .cls_process = UpdateHelper .run_reload (Haproxy .cls_process )
127- elif self .ssl_updated :
128- logger .info ("SSL certificates have been changed" )
129- Haproxy .cls_process = UpdateHelper .run_reload (Haproxy .cls_process )
130- else :
131- logger .info ("HAProxy configuration remains unchanged" )
132- logger .info ("===========END===========" )
133- elif self .link_mode in ["legacy" ]:
141+ if Haproxy .cls_cfg != cfg :
134142 logger .info ("HAProxy configuration:\n %s" % cfg )
143+ Haproxy .cls_cfg = cfg
135144 if save_to_file (HAPROXY_CONFIG_FILE , cfg ):
136- UpdateHelper .run_once ()
145+ Haproxy .cls_process = UpdateHelper .run_reload (Haproxy .cls_process )
146+ elif self .ssl_updated :
147+ logger .info ("SSL certificates have been changed" )
148+ Haproxy .cls_process = UpdateHelper .run_reload (Haproxy .cls_process )
149+ else :
150+ logger .info ("HAProxy configuration remains unchanged" )
151+ logger .info ("===========END===========" )
137152
138153 def _config_ssl (self ):
139154 ssl_bind_string = ""
@@ -198,8 +213,8 @@ def _config_global_section():
198213 if NBPROC > 1 :
199214 statements .append ("nbproc %s" % NBPROC )
200215 statements .append ("stats bind-process %s" % NBPROC )
201- for x in range (1 , NBPROC + 1 ):
202- statements .append ("cpu-map %s %s" % (x , x - 1 ))
216+ for x in range (1 , NBPROC + 1 ):
217+ statements .append ("cpu-map %s %s" % (x , x - 1 ))
203218
204219 statements .extend (ConfigHelper .config_ssl_bind_options (SSL_BIND_OPTIONS ))
205220 statements .extend (ConfigHelper .config_ssl_bind_ciphers (SSL_BIND_CIPHERS ))
0 commit comments