Merge "Fix init container in capsule"
This commit is contained in:
commit
6aef076bb0
@ -33,5 +33,6 @@ SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10 # MIT
|
|||||||
stevedore>=1.20.0 # Apache-2.0
|
stevedore>=1.20.0 # Apache-2.0
|
||||||
docker>=2.4.2 # Apache-2.0
|
docker>=2.4.2 # Apache-2.0
|
||||||
neutron-lib>=1.13.0 # Apache-2.0
|
neutron-lib>=1.13.0 # Apache-2.0
|
||||||
|
tenacity>=4.9.0 # Apache-2.0
|
||||||
websockify>=0.8.0 # LGPLv3
|
websockify>=0.8.0 # LGPLv3
|
||||||
websocket-client>=0.44.0 # LGPLv2+
|
websocket-client>=0.44.0 # LGPLv2+
|
||||||
|
@ -24,6 +24,7 @@ from oslo_utils import timeutils
|
|||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
import psutil
|
import psutil
|
||||||
import six
|
import six
|
||||||
|
import tenacity
|
||||||
|
|
||||||
from zun.common import consts
|
from zun.common import consts
|
||||||
from zun.common import exception
|
from zun.common import exception
|
||||||
@ -1193,6 +1194,11 @@ class DockerDriver(driver.ContainerDriver):
|
|||||||
capsule = self.create(context, capsule, image, requested_networks,
|
capsule = self.create(context, capsule, image, requested_networks,
|
||||||
requested_volumes)
|
requested_volumes)
|
||||||
self.start(context, capsule)
|
self.start(context, capsule)
|
||||||
|
for container in capsule.init_containers:
|
||||||
|
self._create_container_in_capsule(context, capsule, container,
|
||||||
|
requested_networks,
|
||||||
|
requested_volumes)
|
||||||
|
self._wait_for_init_container(context, container)
|
||||||
for container in capsule.containers:
|
for container in capsule.containers:
|
||||||
self._create_container_in_capsule(context, capsule, container,
|
self._create_container_in_capsule(context, capsule, container,
|
||||||
requested_networks,
|
requested_networks,
|
||||||
@ -1284,6 +1290,26 @@ class DockerDriver(driver.ContainerDriver):
|
|||||||
self._populate_container(container, response)
|
self._populate_container(container, response)
|
||||||
container.save(context)
|
container.save(context)
|
||||||
|
|
||||||
|
def _wait_for_init_container(self, context, container, timeout=3600):
|
||||||
|
def retry_if_result_is_false(result):
|
||||||
|
return result is False
|
||||||
|
|
||||||
|
def check_init_container_stopped():
|
||||||
|
status = self.show(context, container).status
|
||||||
|
if status == consts.STOPPED:
|
||||||
|
return True
|
||||||
|
elif status == consts.RUNNING:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
raise exception.ZunException(
|
||||||
|
_("Container has unexpected status: %s") % status)
|
||||||
|
|
||||||
|
r = tenacity.Retrying(
|
||||||
|
stop=tenacity.stop_after_delay(timeout),
|
||||||
|
wait=tenacity.wait_exponential(),
|
||||||
|
retry=tenacity.retry_if_result(retry_if_result_is_false))
|
||||||
|
r.call(check_init_container_stopped)
|
||||||
|
|
||||||
def delete_capsule(self, context, capsule, force):
|
def delete_capsule(self, context, capsule, force):
|
||||||
for container in capsule.containers:
|
for container in capsule.containers:
|
||||||
self._delete_container_in_capsule(context, capsule, container,
|
self._delete_container_in_capsule(context, capsule, container,
|
||||||
|
Loading…
Reference in New Issue
Block a user