浏览代码

Properly relay errors in execute_convergence_plan

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 8 年之前
父节点
当前提交
457c16a7b1
共有 2 个文件被更改,包括 16 次插入6 次删除
  1. 15 5
      compose/service.py
  2. 1 1
      tests/acceptance/cli_test.py

+ 15 - 5
compose/service.py

@@ -377,12 +377,16 @@ class Service(object):
                     self.start_container(container)
                 return container
 
-            return parallel_execute(
+            containers, errors = parallel_execute(
                 range(i, i + scale),
                 lambda n: create_and_start(self, n),
                 lambda n: self.get_container_name(n),
                 "Creating"
-            )[0]
+            )
+            if errors:
+                raise OperationFailedError(errors.values()[0])
+
+            return containers
 
     def _execute_convergence_recreate(self, containers, scale, timeout, detached, start):
             if len(containers) > scale:
@@ -394,12 +398,14 @@ class Service(object):
                     container, timeout=timeout, attach_logs=not detached,
                     start_new_container=start
                 )
-            containers = parallel_execute(
+            containers, errors = parallel_execute(
                 containers,
                 recreate,
                 lambda c: c.name,
                 "Recreating"
-            )[0]
+            )
+            if errors:
+                raise OperationFailedError(errors.values()[0])
             if len(containers) < scale:
                 containers.extend(self._execute_convergence_create(
                     scale - len(containers), detached, start
@@ -411,12 +417,16 @@ class Service(object):
                 self._downscale(containers[scale:], timeout)
                 containers = containers[:scale]
             if start:
-                parallel_execute(
+                _, errors = parallel_execute(
                     containers,
                     lambda c: self.start_container_if_stopped(c, attach_logs=not detached),
                     lambda c: c.name,
                     "Starting"
                 )
+
+                if errors:
+                    raise OperationFailedError(errors.values()[0])
+
             if len(containers) < scale:
                 containers.extend(self._execute_convergence_create(
                     scale - len(containers), detached, start

+ 1 - 1
tests/acceptance/cli_test.py

@@ -151,7 +151,7 @@ class CLITestCase(DockerClientTestCase):
     def test_help(self):
         self.base_dir = 'tests/fixtures/no-composefile'
         result = self.dispatch(['help', 'up'], returncode=0)
-        assert 'Usage: up [options] [SERVICE...]' in result.stdout
+        assert 'Usage: up [options] [--scale SERVICE=NUM...] [SERVICE...]' in result.stdout
         # Prevent tearDown from trying to create a project
         self.base_dir = None