Kaydet (Commit) 0e0a8526 authored tarafından Felipe Ruhland's avatar Felipe Ruhland

Ensure that global containers are not scaled

Signed-off-by: 's avatarFelipe Ruhland <felipe.ruhland@gmail.com>
üst edb9e3c2
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,
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment