Ensure that global containers are not scaled

Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
This commit is contained in:
Felipe Ruhland 2017-12-26 18:25:20 -02:00
parent edb9e3c2ae
commit 0e0a852680
2 changed files with 28 additions and 1 deletions

View File

@ -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,

View File

@ -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)