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