44import random
55import re
66import subprocess
7-
8- from subprocess import CalledProcessError
7+ import time
98
109
1110ROOT_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):
209221BindsTo={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"
214226ExecStop=/usr/bin/etcdctl rm --recursive /deis/services/{app}/{name}
215227
216228[X-Fleet]
0 commit comments