1
0
Эх сурвалжийг харах

service.recreate_containers() no longer removes the old containers

We need to keep them around until the new ones have been started.
Aanand Prasad 12 жил өмнө
parent
commit
bdc6b47e1f
2 өөрчлөгдсөн 19 нэмэгдсэн , 12 устгасан
  1. 5 6
      fig/service.py
  2. 14 6
      tests/service_test.py

+ 5 - 6
fig/service.py

@@ -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:

+ 14 - 6
tests/service_test.py

@@ -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]
+        (old, new) = service.recreate_containers()
+        self.assertEqual(old, [old_container])
+        self.assertEqual(len(new), 1)
+
+        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)), 1)
-        self.assertNotEqual(container.id, new_container.id)
+        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')