mirror of https://github.com/docker/compose.git
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:
parent
10267a83dc
commit
ffb8f9f1b4
|
@ -378,16 +378,12 @@ class Service(object):
|
||||||
self.start_container(container)
|
self.start_container(container)
|
||||||
return container
|
return container
|
||||||
|
|
||||||
containers, errors = parallel_execute(
|
return parallel_execute(
|
||||||
range(i, i + scale),
|
range(i, i + scale),
|
||||||
lambda n: create_and_start(self, n),
|
lambda n: create_and_start(self, n),
|
||||||
lambda n: self.get_container_name(n),
|
lambda n: self.get_container_name(n),
|
||||||
"Creating"
|
"Creating"
|
||||||
)
|
)[0]
|
||||||
for error in errors.values():
|
|
||||||
raise OperationFailedError(error)
|
|
||||||
|
|
||||||
return containers
|
|
||||||
|
|
||||||
def _execute_convergence_recreate(self, containers, scale, timeout, detached, start):
|
def _execute_convergence_recreate(self, containers, scale, timeout, detached, start):
|
||||||
if len(containers) > scale:
|
if len(containers) > scale:
|
||||||
|
@ -399,15 +395,12 @@ class Service(object):
|
||||||
container, timeout=timeout, attach_logs=not detached,
|
container, timeout=timeout, attach_logs=not detached,
|
||||||
start_new_container=start
|
start_new_container=start
|
||||||
)
|
)
|
||||||
containers, errors = parallel_execute(
|
containers = parallel_execute(
|
||||||
containers,
|
containers,
|
||||||
recreate,
|
recreate,
|
||||||
lambda c: c.name,
|
lambda c: c.name,
|
||||||
"Recreating"
|
"Recreating"
|
||||||
)
|
)[0]
|
||||||
for error in errors.values():
|
|
||||||
raise OperationFailedError(error)
|
|
||||||
|
|
||||||
if len(containers) < scale:
|
if len(containers) < scale:
|
||||||
containers.extend(self._execute_convergence_create(
|
containers.extend(self._execute_convergence_create(
|
||||||
scale - len(containers), detached, start
|
scale - len(containers), detached, start
|
||||||
|
@ -419,16 +412,13 @@ class Service(object):
|
||||||
self._downscale(containers[scale:], timeout)
|
self._downscale(containers[scale:], timeout)
|
||||||
containers = containers[:scale]
|
containers = containers[:scale]
|
||||||
if start:
|
if start:
|
||||||
_, errors = parallel_execute(
|
parallel_execute(
|
||||||
containers,
|
containers,
|
||||||
lambda c: self.start_container_if_stopped(c, attach_logs=not detached),
|
lambda c: self.start_container_if_stopped(c, attach_logs=not detached),
|
||||||
lambda c: c.name,
|
lambda c: c.name,
|
||||||
"Starting"
|
"Starting"
|
||||||
)
|
)
|
||||||
|
|
||||||
for error in errors.values():
|
|
||||||
raise OperationFailedError(error)
|
|
||||||
|
|
||||||
if len(containers) < scale:
|
if len(containers) < scale:
|
||||||
containers.extend(self._execute_convergence_create(
|
containers.extend(self._execute_convergence_create(
|
||||||
scale - len(containers), detached, start
|
scale - len(containers), detached, start
|
||||||
|
|
|
@ -1866,6 +1866,7 @@ class CLITestCase(DockerClientTestCase):
|
||||||
self.assertEqual(len(project.get_service('simple').containers()), 0)
|
self.assertEqual(len(project.get_service('simple').containers()), 0)
|
||||||
self.assertEqual(len(project.get_service('another').containers()), 0)
|
self.assertEqual(len(project.get_service('another').containers()), 0)
|
||||||
|
|
||||||
|
<<<<<<< 10267a83dc79ba0f8cebe17b561c05367b947247
|
||||||
def test_scale_v2_2(self):
|
def test_scale_v2_2(self):
|
||||||
self.base_dir = 'tests/fixtures/scale'
|
self.base_dir = 'tests/fixtures/scale'
|
||||||
result = self.dispatch(['scale', 'web=1'], returncode=1)
|
result = self.dispatch(['scale', 'web=1'], returncode=1)
|
||||||
|
@ -1887,6 +1888,11 @@ class CLITestCase(DockerClientTestCase):
|
||||||
self.base_dir = 'tests/fixtures/scale'
|
self.base_dir = 'tests/fixtures/scale'
|
||||||
project = self.project
|
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'])
|
self.dispatch(['up', '-d'])
|
||||||
assert len(project.get_service('web').containers()) == 2
|
assert len(project.get_service('web').containers()) == 2
|
||||||
assert len(project.get_service('db').containers()) == 1
|
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('web').containers()) == 1
|
||||||
assert len(project.get_service('db').containers()) == 1
|
assert len(project.get_service('db').containers()) == 1
|
||||||
|
|
||||||
|
<<<<<<< 10267a83dc79ba0f8cebe17b561c05367b947247
|
||||||
def test_up_scale_reset(self):
|
def test_up_scale_reset(self):
|
||||||
self.base_dir = 'tests/fixtures/scale'
|
self.base_dir = 'tests/fixtures/scale'
|
||||||
project = self.project
|
project = self.project
|
||||||
|
@ -1910,6 +1917,15 @@ class CLITestCase(DockerClientTestCase):
|
||||||
def test_up_scale_to_zero(self):
|
def test_up_scale_to_zero(self):
|
||||||
self.base_dir = 'tests/fixtures/scale'
|
self.base_dir = 'tests/fixtures/scale'
|
||||||
project = self.project
|
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'])
|
self.dispatch(['up', '-d'])
|
||||||
assert len(project.get_service('web').containers()) == 2
|
assert len(project.get_service('web').containers()) == 2
|
||||||
|
|
Loading…
Reference in New Issue