summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Ruhland <felipe.ruhland@gmail.com>2017-12-26 18:25:20 -0200
committerFelipe Ruhland <felipe.ruhland@gmail.com>2017-12-26 18:30:28 -0200
commit0e0a8526801d207bfdf2e9011ab1348525437a79 (patch)
tree67446ee50d427d06bf4637c41c11046da64b6128
parentedb9e3c2ae85f382549df8365a5b2f18986fc5e2 (diff)
downloaddocker-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.py5
-rw-r--r--tests/integration/models_services_test.py24
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)