Implement --scale option on up command, allow scale config in v2.2 format

docker-compose scale modified to reuse code between up and scale

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2017-04-17 19:03:56 -07:00 committed by Joffrey F
parent 10267a83dc
commit ffb8f9f1b4
2 changed files with 21 additions and 15 deletions

View File

@ -378,16 +378,12 @@ class Service(object):
self.start_container(container)
return container
containers, errors = parallel_execute(
return parallel_execute(
range(i, i + scale),
lambda n: create_and_start(self, n),
lambda n: self.get_container_name(n),
"Creating"
)
for error in errors.values():
raise OperationFailedError(error)
return containers
)[0]
def _execute_convergence_recreate(self, containers, scale, timeout, detached, start):
if len(containers) > scale:
@ -399,15 +395,12 @@ class Service(object):
container, timeout=timeout, attach_logs=not detached,
start_new_container=start
)
containers, errors = parallel_execute(
containers = parallel_execute(
containers,
recreate,
lambda c: c.name,
"Recreating"
)
for error in errors.values():
raise OperationFailedError(error)
)[0]
if len(containers) < scale:
containers.extend(self._execute_convergence_create(
scale - len(containers), detached, start
@ -419,16 +412,13 @@ class Service(object):
self._downscale(containers[scale:], timeout)
containers = containers[:scale]
if start:
_, errors = parallel_execute(
parallel_execute(
containers,
lambda c: self.start_container_if_stopped(c, attach_logs=not detached),
lambda c: c.name,
"Starting"
)
for error in errors.values():
raise OperationFailedError(error)
if len(containers) < scale:
containers.extend(self._execute_convergence_create(
scale - len(containers), detached, start

View File

@ -1866,6 +1866,7 @@ class CLITestCase(DockerClientTestCase):
self.assertEqual(len(project.get_service('simple').containers()), 0)
self.assertEqual(len(project.get_service('another').containers()), 0)
<<<<<<< 10267a83dc79ba0f8cebe17b561c05367b947247
def test_scale_v2_2(self):
self.base_dir = 'tests/fixtures/scale'
result = self.dispatch(['scale', 'web=1'], returncode=1)
@ -1887,6 +1888,11 @@ class CLITestCase(DockerClientTestCase):
self.base_dir = 'tests/fixtures/scale'
project = self.project
=======
def test_up_scale(self):
self.base_dir = 'tests/fixtures/scale'
project = self.project
>>>>>>> Implement --scale option on up command, allow scale config in v2.2 format
self.dispatch(['up', '-d'])
assert len(project.get_service('web').containers()) == 2
assert len(project.get_service('db').containers()) == 1
@ -1895,6 +1901,7 @@ class CLITestCase(DockerClientTestCase):
assert len(project.get_service('web').containers()) == 1
assert len(project.get_service('db').containers()) == 1
<<<<<<< 10267a83dc79ba0f8cebe17b561c05367b947247
def test_up_scale_reset(self):
self.base_dir = 'tests/fixtures/scale'
project = self.project
@ -1910,6 +1917,15 @@ class CLITestCase(DockerClientTestCase):
def test_up_scale_to_zero(self):
self.base_dir = 'tests/fixtures/scale'
project = self.project
=======
self.dispatch(['up', '-d', '--scale', 'web=3'])
assert len(project.get_service('web').containers()) == 3
assert len(project.get_service('db').containers()) == 1
self.dispatch(['up', '-d', '--scale', 'web=1', '--scale', 'db=2'])
assert len(project.get_service('web').containers()) == 1
assert len(project.get_service('db').containers()) == 2
>>>>>>> Implement --scale option on up command, allow scale config in v2.2 format
self.dispatch(['up', '-d'])
assert len(project.get_service('web').containers()) == 2