From f5f93577366ac1cfdbb7ea803c157959aa9a7009 Mon Sep 17 00:00:00 2001 From: Aanand Prasad Date: Wed, 15 Jan 2014 13:17:39 +0000 Subject: [PATCH] Remove project.create_containers(), revamp project.recreate_containers() `recreate_containers` now returns two lists of old+new containers, along with their services. --- fig/project.py | 22 ++++++++++++---------- fig/service.py | 2 +- tests/project_test.py | 13 +++++++++---- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/fig/project.py b/fig/project.py index 95d13ee9e..f77da5f7d 100644 --- a/fig/project.py +++ b/fig/project.py @@ -79,20 +79,22 @@ class Project(object): unsorted = [self.get_service(name) for name in service_names] return [s for s in self.services if s in unsorted] - def create_containers(self, service_names=None): - """ - For each service, creates a container if there are none. - """ - for service in self.get_services(service_names): - if len(service.containers(stopped=True)) == 0: - service.create_container() - - def recreate_containers(self, service_names): + def recreate_containers(self, service_names=None): """ For each service, create or recreate their containers. + Returns a tuple with two lists. The first is a list of + (service, old_container) tuples; the second is a list + of (service, new_container) tuples. """ + old = [] + new = [] + for service in self.get_services(service_names): - service.recreate_containers() + (s_old, s_new) = service.recreate_containers() + old += [(service, container) for container in s_old] + new += [(service, container) for container in s_new] + + return (old, new) def start(self, service_names=None, **options): for service in self.get_services(service_names): diff --git a/fig/service.py b/fig/service.py index c6396d8c7..91a89791d 100644 --- a/fig/service.py +++ b/fig/service.py @@ -80,7 +80,7 @@ class Service(object): """ old_containers = self.containers(stopped=True) if len(old_containers) == 0: - return [self.create_container(**override_options)] + return ([], [self.create_container(**override_options)]) else: new_containers = [] for old_container in old_containers: diff --git a/tests/project_test.py b/tests/project_test.py index 09792fabd..bad9f612b 100644 --- a/tests/project_test.py +++ b/tests/project_test.py @@ -42,17 +42,22 @@ class ProjectTest(DockerClientTestCase): project = Project('test', [web], self.client) self.assertEqual(project.get_service('web'), web) - def test_create_containers(self): + def test_recreate_containers(self): web = self.create_service('web') db = self.create_service('db') project = Project('test', [web, db], self.client) - project.create_containers(service_names=['web']) + old_web_container = web.create_container() self.assertEqual(len(web.containers(stopped=True)), 1) self.assertEqual(len(db.containers(stopped=True)), 0) - project.create_containers() - self.assertEqual(len(web.containers(stopped=True)), 1) + (old, new) = project.recreate_containers() + self.assertEqual(old, [(web, old_web_container)]) + self.assertEqual(len(new), 2) + self.assertEqual(new[0][0], web) + self.assertEqual(new[1][0], db) + + self.assertEqual(len(web.containers(stopped=True)), 2) self.assertEqual(len(db.containers(stopped=True)), 1) def test_start_stop_kill_remove(self):