diff options
| author | Felipe Ruhland <felipe.ruhland@gmail.com> | 2017-12-26 18:25:20 -0200 |
|---|---|---|
| committer | Felipe Ruhland <felipe.ruhland@gmail.com> | 2017-12-26 18:30:28 -0200 |
| commit | 0e0a8526801d207bfdf2e9011ab1348525437a79 (patch) | |
| tree | 67446ee50d427d06bf4637c41c11046da64b6128 | |
| parent | edb9e3c2ae85f382549df8365a5b2f18986fc5e2 (diff) | |
| download | docker-py-0e0a8526801d207bfdf2e9011ab1348525437a79.tar.gz | |
Ensure that global containers are not scaled
Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
| -rw-r--r-- | docker/models/services.py | 5 | ||||
| -rw-r--r-- | tests/integration/models_services_test.py | 24 |
2 files changed, 28 insertions, 1 deletions
diff --git a/docker/models/services.py b/docker/models/services.py index e87e2d4..4c8acce 100644 --- a/docker/models/services.py +++ b/docker/models/services.py @@ -1,5 +1,5 @@ import copy -from docker.errors import create_unexpected_kwargs_error +from docker.errors import create_unexpected_kwargs_error, InvalidArgument from docker.types import TaskTemplate, ContainerSpec, ServiceMode from .resource import Model, Collection @@ -116,6 +116,9 @@ class Service(Model): ``True``if successful. """ + if not self.attrs['Spec']['Mode'].get('Global'): + raise InvalidArgument('Cannot scale a global container') + service_mode = ServiceMode('replicated', replicas) return self.client.api.update_service(self.id, self.version, service_mode, diff --git a/tests/integration/models_services_test.py b/tests/integration/models_services_test.py index e7f16cd..64aba66 100644 --- a/tests/integration/models_services_test.py +++ b/tests/integration/models_services_test.py @@ -4,6 +4,8 @@ import docker from .. import helpers from .base import TEST_API_VERSION +from docker.errors import InvalidArgument +from docker.models.services import ServiceMode class ServiceTest(unittest.TestCase): @@ -225,6 +227,28 @@ class ServiceTest(unittest.TestCase): spec = service.attrs['Spec']['TaskTemplate']['ContainerSpec'] assert spec.get('Command') == ['sleep', '300'] + def test_scale_method_global_service(self): + client = docker.from_env(version=TEST_API_VERSION) + mode = ServiceMode('global') + service = client.services.create( + name=helpers.random_name(), + image="alpine", + command="sleep 300", + mode=mode + ) + tasks = [] + while len(tasks) == 0: + tasks = service.tasks() + assert len(tasks) == 1 + with self.assertRaises(InvalidArgument, + msg='Cannot scale a global container'): + service.scale(2) + + assert len(tasks) == 1 + service.reload() + spec = service.attrs['Spec']['TaskTemplate']['ContainerSpec'] + assert spec.get('Command') == ['sleep', '300'] + @helpers.requires_api_version('1.25') def test_restart_service(self): client = docker.from_env(version=TEST_API_VERSION) |
