Skip to content

Commit 4c99c2b

Browse files
Gabriel MonroyMatthew Fisher
authored andcommitted
fix(coreos): add wait_for_announcer to block until containers are ready
1 parent 7216f73 commit 4c99c2b

1 file changed

Lines changed: 20 additions & 8 deletions

File tree

controller/scheduler/coreos.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import random
55
import re
66
import subprocess
7-
8-
from subprocess import CalledProcessError
7+
import time
98

109

1110
ROOT_DIR = os.path.join(os.getcwd(), 'coreos')
@@ -94,6 +93,12 @@ def start(self, name):
9493
self._start_log(name, env)
9594
self._start_container(name, env)
9695
self._start_announcer(name, env)
96+
self._wait_for_announcer(name, env)
97+
98+
def _start_log(self, name, env):
99+
subprocess.check_call(
100+
'fleetctl.sh start {name}-log.service'.format(**locals()),
101+
shell=True, env=env)
97102

98103
def _start_container(self, name, env):
99104
return subprocess.check_call(
@@ -105,10 +110,17 @@ def _start_announcer(self, name, env):
105110
'fleetctl.sh start {name}-announce.service'.format(**locals()),
106111
shell=True, env=env)
107112

108-
def _start_log(self, name, env):
109-
return subprocess.check_call(
110-
'fleetctl.sh start {name}-log.service'.format(**locals()),
111-
shell=True, env=env)
113+
def _wait_for_announcer(self, name, env):
114+
status = None
115+
for _ in range(60):
116+
status = subprocess.check_output(
117+
"fleetctl.sh list-units | grep {name}-announce.service | awk '{{print $4}}'".format(**locals()),
118+
shell=True, env=env).strip('\n')
119+
if status == 'running':
120+
break
121+
time.sleep(1)
122+
else:
123+
raise RuntimeError('Container failed to start')
112124

113125
def stop(self, name):
114126
"""
@@ -209,8 +221,8 @@ def attach(self, name):
209221
BindsTo={name}.service
210222
211223
[Service]
212-
ExecStartPre=/bin/sh -c "until /usr/bin/docker port {name} {port} >/dev/null 2>&1; do sleep 2; done; port=$(docker port {name} {port} | cut -d ':' -f2); host=$(getent hosts deis | awk {{'print $1'}}); echo Waiting for $port/tcp...; until cat </dev/null>/dev/tcp/$host/$port; do sleep 1; done"
213-
ExecStart=/bin/sh -c "port=$(docker port {name} {port} | cut -d ':' -f2); host=$(getent hosts deis | awk {{'print $1'}}); echo Connected to $host:$port/tcp, publishing to etcd...; while netstat -lnt | grep $port >/dev/null; do etcdctl set /deis/services/{app}/{name} $host:$port --ttl 60 >/dev/null; sleep 45; done"
224+
ExecStartPre=/bin/sh -c "until /usr/bin/docker port {name} {port} >/dev/null 2>&1; do sleep 2; done; port=$(docker port {name} {port} | cut -d ':' -f2); host=$(getent hosts deis | awk {{'print $1'}}); echo Waiting for $port/tcp...; until netstat -lnt | grep :$port >/dev/null; do sleep 1; done"
225+
ExecStart=/bin/sh -c "port=$(docker port {name} {port} | cut -d ':' -f2); host=$(getent hosts deis | awk {{'print $1'}}); echo Connected to $host:$port/tcp, publishing to etcd...; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /deis/services/{app}/{name} $host:$port --ttl 60 >/dev/null; sleep 45; done"
214226
ExecStop=/usr/bin/etcdctl rm --recursive /deis/services/{app}/{name}
215227
216228
[X-Fleet]

0 commit comments

Comments
 (0)