service.recreate_containers() no longer removes the old containers

We need to keep them around until the new ones have been started.
This commit is contained in:
Aanand Prasad 2014-01-15 13:06:25 +00:00
parent 3669236aa1
commit bdc6b47e1f
2 changed files with 20 additions and 13 deletions

View File

@ -76,21 +76,20 @@ class Service(object):
def recreate_containers(self, **override_options):
"""
If a container for this service doesn't exist, create one. If there are
any, stop, remove and recreate them.
any, stop them and create new ones. Does not remove the old containers.
"""
containers = self.containers(stopped=True)
if len(containers) == 0:
old_containers = self.containers(stopped=True)
if len(old_containers) == 0:
return [self.create_container(**override_options)]
else:
new_containers = []
for old_container in containers:
for old_container in old_containers:
if old_container.is_running:
old_container.stop()
options = dict(override_options)
options['volumes_from'] = old_container.id
new_containers.append(self.create_container(**options))
old_container.remove()
return new_containers
return (old_containers, new_containers)
def start_container(self, container=None, **override_options):
if container is None:

View File

@ -109,16 +109,24 @@ class ServiceTest(DockerClientTestCase):
self.assertIn('/var/db', container.inspect()['Volumes'])
def test_recreate_containers(self):
service = self.create_service('db', environment={'FOO': '1'})
container = service.create_container()
self.assertEqual(container.dictionary['Config']['Env'], ['FOO=1'])
service = self.create_service('db', environment={'FOO': '1'}, volumes=['/var/db'])
old_container = service.create_container()
self.assertEqual(old_container.dictionary['Config']['Env'], ['FOO=1'])
service.start_container(old_container)
volume_path = old_container.inspect()['Volumes']['/var/db']
service.options['environment']['FOO'] = '2'
new_container = service.recreate_containers()[0]
self.assertEqual(new_container.dictionary['Config']['Env'], ['FOO=2'])
(old, new) = service.recreate_containers()
self.assertEqual(old, [old_container])
self.assertEqual(len(new), 1)
self.assertEqual(len(service.containers(stopped=True)), 1)
self.assertNotEqual(container.id, new_container.id)
new_container = new[0]
self.assertEqual(new_container.dictionary['Config']['Env'], ['FOO=2'])
service.start_container(new_container)
self.assertEqual(new_container.inspect()['Volumes']['/var/db'], volume_path)
self.assertEqual(len(service.containers(stopped=True)), 2)
self.assertNotEqual(old_container.id, new_container.id)
def test_start_container_passes_through_options(self):
db = self.create_service('db')