mirror of https://github.com/docker/docker-py.git
Merge pull request #2741 from WojciechowskiPiotr/maxreplicas
Support for docker.types.Placement.MaxReplicas
This commit is contained in:
commit
caef663729
|
@ -157,6 +157,8 @@ class ServiceCollection(Collection):
|
||||||
constraints.
|
constraints.
|
||||||
preferences (list of tuple): :py:class:`~docker.types.Placement`
|
preferences (list of tuple): :py:class:`~docker.types.Placement`
|
||||||
preferences.
|
preferences.
|
||||||
|
maxreplicas (int): :py:class:`~docker.types.Placement` maxreplicas
|
||||||
|
or (int) representing maximum number of replicas per node.
|
||||||
platforms (list of tuple): A list of platform constraints
|
platforms (list of tuple): A list of platform constraints
|
||||||
expressed as ``(arch, os)`` tuples.
|
expressed as ``(arch, os)`` tuples.
|
||||||
container_labels (dict): Labels to apply to the container.
|
container_labels (dict): Labels to apply to the container.
|
||||||
|
@ -319,6 +321,7 @@ PLACEMENT_KWARGS = [
|
||||||
'constraints',
|
'constraints',
|
||||||
'preferences',
|
'preferences',
|
||||||
'platforms',
|
'platforms',
|
||||||
|
'maxreplicas',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -659,10 +659,12 @@ class Placement(dict):
|
||||||
are provided in order from highest to lowest precedence and
|
are provided in order from highest to lowest precedence and
|
||||||
are expressed as ``(strategy, descriptor)`` tuples. See
|
are expressed as ``(strategy, descriptor)`` tuples. See
|
||||||
:py:class:`PlacementPreference` for details.
|
:py:class:`PlacementPreference` for details.
|
||||||
|
maxreplicas (int): Maximum number of replicas per node
|
||||||
platforms (:py:class:`list` of tuple): A list of platforms
|
platforms (:py:class:`list` of tuple): A list of platforms
|
||||||
expressed as ``(arch, os)`` tuples
|
expressed as ``(arch, os)`` tuples
|
||||||
"""
|
"""
|
||||||
def __init__(self, constraints=None, preferences=None, platforms=None):
|
def __init__(self, constraints=None, preferences=None, platforms=None,
|
||||||
|
maxreplicas=None):
|
||||||
if constraints is not None:
|
if constraints is not None:
|
||||||
self['Constraints'] = constraints
|
self['Constraints'] = constraints
|
||||||
if preferences is not None:
|
if preferences is not None:
|
||||||
|
@ -671,6 +673,8 @@ class Placement(dict):
|
||||||
if isinstance(pref, tuple):
|
if isinstance(pref, tuple):
|
||||||
pref = PlacementPreference(*pref)
|
pref = PlacementPreference(*pref)
|
||||||
self['Preferences'].append(pref)
|
self['Preferences'].append(pref)
|
||||||
|
if maxreplicas is not None:
|
||||||
|
self['MaxReplicas'] = maxreplicas
|
||||||
if platforms:
|
if platforms:
|
||||||
self['Platforms'] = []
|
self['Platforms'] = []
|
||||||
for plat in platforms:
|
for plat in platforms:
|
||||||
|
|
|
@ -471,6 +471,19 @@ class ServiceTest(BaseAPIIntegrationTest):
|
||||||
assert 'Placement' in svc_info['Spec']['TaskTemplate']
|
assert 'Placement' in svc_info['Spec']['TaskTemplate']
|
||||||
assert svc_info['Spec']['TaskTemplate']['Placement'] == placemt
|
assert svc_info['Spec']['TaskTemplate']['Placement'] == placemt
|
||||||
|
|
||||||
|
@requires_api_version('1.40')
|
||||||
|
def test_create_service_with_placement_maxreplicas(self):
|
||||||
|
container_spec = docker.types.ContainerSpec(TEST_IMG, ['true'])
|
||||||
|
placemt = docker.types.Placement(maxreplicas=1)
|
||||||
|
task_tmpl = docker.types.TaskTemplate(
|
||||||
|
container_spec, placement=placemt
|
||||||
|
)
|
||||||
|
name = self.get_service_name()
|
||||||
|
svc_id = self.client.create_service(task_tmpl, name=name)
|
||||||
|
svc_info = self.client.inspect_service(svc_id)
|
||||||
|
assert 'Placement' in svc_info['Spec']['TaskTemplate']
|
||||||
|
assert svc_info['Spec']['TaskTemplate']['Placement'] == placemt
|
||||||
|
|
||||||
def test_create_service_with_endpoint_spec(self):
|
def test_create_service_with_endpoint_spec(self):
|
||||||
container_spec = docker.types.ContainerSpec(TEST_IMG, ['true'])
|
container_spec = docker.types.ContainerSpec(TEST_IMG, ['true'])
|
||||||
task_tmpl = docker.types.TaskTemplate(container_spec)
|
task_tmpl = docker.types.TaskTemplate(container_spec)
|
||||||
|
|
|
@ -28,6 +28,7 @@ class CreateServiceKwargsTest(unittest.TestCase):
|
||||||
'constraints': ['foo=bar'],
|
'constraints': ['foo=bar'],
|
||||||
'preferences': ['bar=baz'],
|
'preferences': ['bar=baz'],
|
||||||
'platforms': [('x86_64', 'linux')],
|
'platforms': [('x86_64', 'linux')],
|
||||||
|
'maxreplicas': 1
|
||||||
})
|
})
|
||||||
|
|
||||||
task_template = kwargs.pop('task_template')
|
task_template = kwargs.pop('task_template')
|
||||||
|
@ -47,6 +48,7 @@ class CreateServiceKwargsTest(unittest.TestCase):
|
||||||
'Constraints': ['foo=bar'],
|
'Constraints': ['foo=bar'],
|
||||||
'Preferences': ['bar=baz'],
|
'Preferences': ['bar=baz'],
|
||||||
'Platforms': [{'Architecture': 'x86_64', 'OS': 'linux'}],
|
'Platforms': [{'Architecture': 'x86_64', 'OS': 'linux'}],
|
||||||
|
'MaxReplicas': 1,
|
||||||
}
|
}
|
||||||
assert task_template['LogDriver'] == {
|
assert task_template['LogDriver'] == {
|
||||||
'Name': 'logdriver',
|
'Name': 'logdriver',
|
||||||
|
|
Loading…
Reference in New Issue